SGBDrillDownController 1.3.2

SGBDrillDownController 1.3.2

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

Aithusa 维护。



  • Simon Booth

SGBDrillDownController 是 iPad 的父视图控制器,类似于 UINavigationController 管理堆栈中的控制器,同时类似于 UISplitViewController 保持顶部两个控制器可见。

安装

要将在您的项目中使用 SGBDrillDownController,请将此行添加到您的 podfile

pod 'SGBDrillDownController', '~> 1.1'

然后运行

$ pod install

有关有关 pods 和 podfiles 的更多信息,请访问 CocoaPods 网站。

测试

SGBDrillDownController 使用 KIF 在示例项目中运行一系列功能测试。要运行测试

  • 通过运行 pod install 安装 KIF
  • 打开 SGBDrillDownControllerDemo.xcworkspace不是 SGBDrillDownControllerDemo.xcodeproj
  • 选择 Funtional Tests 目标
  • 构建并运行

注意:Xcode(通过 LLVM)已为“意外根类”(LLVM 的 -Wobj-root-class)添加了编译警告,KIF 通过其 LoadableCategory.h 钩子触发了。由于 CocoaPods 启用了所有警告的最高级别,因此此警告被视为错误,您将无法构建或运行测试,直到您调整设置。为此设置,选择 Pods 项目,导航到 Pods-KIF构建设置不仅仅是 Pods),并在 Apple LLVM 5.0 - Warnings - Objective C 下的 Unintentional Root Class 选择 No。不幸的是,每次您运行 pod install,此设置都会被重置,并且您需要再次执行这些步骤。

iOS 状态保存和恢复

钻探控制器在 iOS6+ 上实现了完整的状态保存和恢复。所有具有非空 restorationIdentifier 属性的子视图控制器都将被保存和恢复。

注意:钻探控制器将尽可能保持最多的状态。这导致以下注意事项

  • 例如,如果有五个控制器在堆栈上,只有最后三个具有有效的恢复标识符,则前两个将不会被恢复,但最后三个将恢复。
  • 同样,钻探控制器将尝试维护哪个子控制器位于右侧或左侧的状态,但如果左侧的所有视图控制器都没有有效的恢复标识符而右侧视图控制器有,则右侧视图控制器将被恢复为左侧视图控制器堆栈上的唯一元素,以维护钻探控制器的有效内部状态。

确保在您的应用程序恢复时应用恢复标识符以维护有效状态是您的责任。

iOS 7 支持

钻探控制器实现了与 UINavigationController 相似的 iOS 7 风格动画和滑动返回导航功能。动画用于编译带有 iOS7+ SDK 的所有应用程序。滑动返回导航功能仅在应用程序编译带有 iOS7+ SDK 且在 iOS7+ 设备上运行时可用。

只有当 leftViewControllers 堆栈上至少有两个视图控制器时,才会启用滑动返回导航功能,因为从倒数第二个或最后一个视图控制器弹出操作与滑动返回导航功能所暗示的视觉效果不同。

由于 UINavigationBar 类的限制,在滑动返回导航手势期间,导航项不可交互动画,这与 UINavigationController 不同。

旋转、滑动返回和标签/导航控制器

不幸的是,UITabBarController 或 UINavigationController 都不会在其子视图控制器上调用 shouldAutorotate 函数。如果您将这些控制器嵌入钻探控制器,并支持多设备方向,当您在滑动返回导航时旋转设备,您将注意视觉故障。要修复此问题,您可以为 UINavigationController 或 UITabBarController 实现 category,以将类似的以下代码中的 shouldAutorotate 调用传递给当前视图控制器:

@implementation UITabBarController (SGBAutorotationFixes)

- (BOOL)shouldAutorotate {
    return [self.selectedViewController shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations {
    return [self.selectedViewController supportedInterfaceOrientations];
}

@end

意外行为

由于 Apple 在 iOS 7.1 中引入的 bug,钻探控制器管理其包含的视图控制器上的 hidesBackButton 属性。这似乎不太可能造成任何问题,因为它保持了导航栏外观的一般期望,但如果您在特定的用例中遇到问题,至少您知道为什么存在这种行为。