Objective c 在不同的视图控制器上指定UISplitViewController的委托

Objective c 在不同的视图控制器上指定UISplitViewController的委托,objective-c,ios,uisplitviewcontroller,Objective C,Ios,Uisplitviewcontroller,我对IOS开发有点陌生,遇到了一个我一直无法找到答案的问题 我使用的是带有两个独立导航控制器的UISplitViewController。一个是爆米花,一个是细节。基本上,我需要能够将各种细节视图作为代理分配给导航控制器,因为有些可能会显示popover,有些可能不会 我在viewDidLoad上使用的当前代码是: AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; UIS

我对IOS开发有点陌生,遇到了一个我一直无法找到答案的问题

我使用的是带有两个独立导航控制器的UISplitViewController。一个是爆米花,一个是细节。基本上,我需要能够将各种细节视图作为代理分配给导航控制器,因为有些可能会显示popover,有些可能不会

我在viewDidLoad上使用的当前代码是:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UISplitViewController *splitViewController = (UISplitViewController *)appDelegate.window.rootViewController;
splitViewController.delegate = self;
问题是代理仅被指定给使用该代理的第一个视图。在其他视图中使用此选项时,仍会调用上一个视图的委托

有人知道我做错了什么吗?谢谢。

我想出来了

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;
}