SGBDrillDownController 是 iPad 的父视图控制器,类似于 UINavigationController 管理堆栈中的控制器,同时类似于 UISplitViewController 保持顶部两个控制器可见。
要将在您的项目中使用 SGBDrillDownController,请将此行添加到您的 podfile
pod 'SGBDrillDownController', '~> 1.1'
然后运行
$ pod install
有关有关 pods 和 podfiles 的更多信息,请访问 CocoaPods 网站。
SGBDrillDownController 使用 KIF 在示例项目中运行一系列功能测试。要运行测试
pod install
安装 KIFSGBDrillDownControllerDemo.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
,此设置都会被重置,并且您需要再次执行这些步骤。
钻探控制器在 iOS6+ 上实现了完整的状态保存和恢复。所有具有非空 restorationIdentifier
属性的子视图控制器都将被保存和恢复。
注意:钻探控制器将尽可能保持最多的状态。这导致以下注意事项
确保在您的应用程序恢复时应用恢复标识符以维护有效状态是您的责任。
钻探控制器实现了与 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
属性。这似乎不太可能造成任何问题,因为它保持了导航栏外观的一般期望,但如果您在特定的用例中遇到问题,至少您知道为什么存在这种行为。