【问题标题】:iOS - Show/hide UISplitViewController without using delegate methods with UIBarButtonItemiOS - 显示/隐藏 UISplitViewController 而不使用带有 UIBarButtonItem 的委托方法
【发布时间】:2014-10-16 07:45:56
【问题描述】:

我正在尝试为 iPad 开发一个多方向的应用程序。在横向模式下,MasterViewController 应该始终可见,我对此没有任何问题。但是在肖像模式下,我必须创建一个显示/隐藏方法。主要问题是,我不能使用

的委托方法

-(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc

-(void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem

因为我的 detailViewController 不是 NavigationController 并且不应该 是。 detailViewController 也不能有 NavigationItem。让我解释一下原因:

我希望我的所有页面在屏幕底部都有一个类似仪表板的视图。所以我从不改变detailViewController。在屏幕顶部,我在容器视图中嵌入了一个导航控制器。因此,如果您选择了 MasterViewController 的 tableview 项目之一,NavigationController 的 rootViewController 正在发生变化。这就是为什么我不能在 detailViewController 中有导航项。

这些 rootViewController 具有通过自定义委托方法将其状态传递给 detailViewController 的按钮。而且这个方法必须隐藏/显示masterviewcontroller。

我不想创建一些自定义视图和/或动画或自定义弹出框来实现这一点。谁能帮帮我?

【问题讨论】:

    标签: ios show-hide uisplitviewcontroller


    【解决方案1】:

    Detail View Controller 不需要是UINavigationController 就可以委托给拆分视图。

    您可以将DetailViewController 设置为UISplitViewController 的代表。 当拆分视图将隐藏视图(纵向)时,保存弹出框,您可以稍后在需要时显示。

    用户可能仍然会在没有任何按钮的情况下显示它 - 从屏幕左侧滑动。如果它对您的应用程序来说已经足够了,那么您就不需要实现委托方法。

    // In App Delegate or Nib:
    splitViewController.delegate = detailViewController;
    
    
    
    
    // In Detail View Controller :
    
    - (void)splitViewController:(UISplitViewController*)svc
         willHideViewController:(UIViewController *)aViewController
              withBarButtonItem:(UIBarButtonItem*)barButtonItem
           forPopoverController:(UIPopoverController*)pc {
    
    
        self.popoverController = pc;
    
        // Update ui 
        ...
     }
    
    
     - (void)splitViewController:(UISplitViewController*)svc
         willShowViewController:(UIViewController *)aViewController
      invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
    
      self.popoverController = nil;
    }
    
    
    - (void)showMenu {
      [self.popoverController presentPopoverFromRect: ...]
    }
    

    【讨论】:

    • 任何 UINavigationController 都不是 SplitViewController 的委托。这就是重点。这些方法迫使我在 detailViewController 上拥有 UINavigationController 或 UINavigationItem,因为这些方法需要 UIBarButtonItem,而我的 detailViewController 无法拥有它们。
    • Oooppss.. 对不起,我误解了你和你的代码。现在没关系。感谢您的帮助。
    • 不用担心,UISplitView 上的委托方法相当混乱。
    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多