【问题标题】:UISplitviewController - Replace the DetailView at runtime from the MasterView without loosing the button in portraitmodeUISplitviewController - 在运行时从 MasterView 替换详细视图,而不会丢失纵向模式下的按钮
【发布时间】:2013-06-22 12:20:14
【问题描述】:

我有以下问题: 当我试图通过在我的 masterView 的表中选择一个项目来替换我的 UISplitViewController 的 detailView 时,masterView 的导航栏按钮消失了。如果 iPad 处于横向模式,则更换工作没有任何错误迹象。当我先将 iPad 旋转到横向模式然后再回到纵向模式时,该按钮又回来了。所以我想我已经正确设置了 uisplitviewcontroller 的委托。是否有可能告诉 uisplitviewcontroller 要求代表在不旋转设备的情况下更新按钮,或者我在替换 detailView 时是否忘记了某些内容 - 这是 masterViewController 中的替换代码

MyViewController *myvc = [[MyViewController alloc] initWithNibName:nil bundle:nil];
[self.subservientController setViewControllers:[NSArray arrayWithObject:myvc] animated:NO];
self.splitViewController.delegate = myvc;

master的subservientController是navigationcontroller的引用,detailViewController(MyViewController)会在里面推送

【问题讨论】:

    标签: ipad button delegates replace uisplitviewcontroller


    【解决方案1】:

    这是一个非常古老的问题,对于相同类型的事情还有很多其他问题,所以我很惊讶地看到这个问题没有得到解答。不确定您是否仍然需要答案,但对于在搜索中找到此问题的任何其他人,我希望这会有所帮助。

    这里让我感到困惑的是,当您说“masterView 的导航栏按钮消失”时,实际上只是这样。真正发生的是,它甚至从未存在于您刚刚替换旧视图的全新视图中。您甚至在问题中提到了这一点,即您替换了详细视图。当我查看从最初创建我的应用程序的主从应用程序模板生成的文件时,这让我头晕目眩,该模板将 UISplitViewConrollerDelegate 分配给了详细信息视图。

    所以当你或我替换用新视图替换详细视图时,我们也只是清除了 UISplitViewConrollerDelegate,所以我必须确保新的详细视图起作用作为 UISplitViewConrollerDelegate,这为跟踪保存在 iVar 中的 popoverButtonItem 带来了其他问题。

    UISplitViewController Class Reference 中写道:

    您可以采用两种主要方法,具体取决于 您创建的应用程序:

    一个简单的主从界面,其中保留了详细信息视图 持续的。在此配置中,单个视图控制器管理 应用程序生命周期的详细视图并更新 子视图的内容以反映主视图中的选择。这 主视图控制器具有对详细视图控制器的引用 并在选定项目时通知详细视图控制器 发生变化或其他一些相关事件。详细视图 控制器也可以作为拆分视图控制器的委托。

    一个复杂的应用程序,其中主视图和详细视图(以及 相应的视图控制器)可能会改变。在复杂的配置中, 您需要一个单独的自定义控制器对象来管理主控制器和 详细视图控制器并在它们之间进行调解。习俗 控制器通常是拆分视图控制器的委托,并且是 负责与当前细节视图控制器通信 显示和隐藏弹出栏按钮项。

    这里的第二个就是你所拥有的,事实上,Apple 提供了一个名为 MultipleDetailViews 的示例应用程序,它展示了如何正确执行此操作,其中包括将委托放置在详细视图控制器之外并拥有每个详细视图控制器遵循至少有两种方法的协议,一种是添加主按钮,另一种是从导航栏中删除主按钮(假设您在详细视图中有一个导航栏)。

    请注意,“masterView 的导航栏按钮”必须始终在详细视图中显示和隐藏(如果您有多个视图,则每一个都显示和隐藏),因为主视图将是有时隐藏。这是另一件让我感到困惑的事情,因为我一直认为它属于主视图控制器。

    我猜您可能已经解决了所有这些问题,但这有助于解释您问题的实际答案。


    您的新细节视图控制器必须检查您是否正在以纵向显示的 UISplitView 中显示,如果是,则显示按钮。


    只需在 - (void)viewWillAppear:(BOOL)animated 方法中执行此操作,并在需要时显示它。这也意味着您要么必须跟踪上次隐藏的按钮,要么构建一个新按钮。

    希望对您有所帮助,如果有人阅读本文发现我的逻辑错误,请纠正我。每次我发现我的应用程序中缺少该按钮时,这仍然让我感到非常困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多