【问题标题】:Assign Delegate of UISplitViewController on different ViewControllers在不同的 ViewController 上分配 UISplitViewController 的委托
【发布时间】:2012-10-03 21:50:21
【问题描述】:

我是 IOS 开发的新手,遇到了一个我无法找到答案的问题。

我正在使用带有两个独立导航控制器的 UISplitViewController。一个用于弹出框,一个用于细节。基本上,我需要能够将各种详细视图分配为导航控制器的委托,因为有些可能会显示弹出框,有些可能不会。

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

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UISplitViewController *splitViewController = (UISplitViewController *)appDelegate.window.rootViewController;
splitViewController.delegate = self;

问题是委托只被分配给使用它的 First 视图。在其他视图中使用它时,仍会调用前一个视图的委托。

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

【问题讨论】:

    标签: objective-c ios uisplitviewcontroller


    【解决方案1】:

    我想通了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多