我是IOS开发的新手,遇到了一个我无法找到答案的问题。
我正在使用带有两个独立导航控制器的UISplitViewController。一个用于弹出窗口,一个用于细节。基本上,我需要能够将各种详细信息视图指定为导航控制器的委托,因为有些可能会显示弹出框,有些可能不显示。
我在viewDidLoad上使用的当前代码是:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UISplitViewController *splitViewController = (UISplitViewController *)appDelegate.window.rootViewController;
splitViewController.delegate = self;
问题是委托只被分配到使用它的 第一 视图。在其他视图中使用它时,仍然会调用上一个视图的委托。
任何人都知道我可能做错了什么?感谢。
答案 0 :(得分:0)
我明白了。
UISplitViewController文档说
在复杂配置中,您需要一个单独的自定义控制器对象来管理主>和详细视图控制器并在它们之间进行调解。自定义控制器是拆分视图>控制器的委托,负责与当前详细信息视图>控制器进行通信,以显示和隐藏弹出框按钮项。
所以我从一开始就做错了。我通过将所有SplitView逻辑放入一个视图控制器来修复它,如下所示:
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController: (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
BOOL hide = YES;
// Get current view from navigation controller
UINavigationController *detailNavigationController = [svc.viewControllers objectAtIndex:1];
NSInteger topIndex = detailNavigationController.viewControllers.count - 1;
UIViewController *detailviewController = [detailNavigationController.viewControllers objectAtIndex:topIndex];
// Perform different actions based on visible view
NSString *detailTitle = detailviewController.title;
if([detailTitle isEqualToString:@"Controller_Name"]) {
hide = NO;
}
return hide;
}