UISplitViewController 竖屏模式下缺少 UIBarButtonItem

8
我有一个使用UISplitViewController的应用程序,当我在纵向模式下启动应用程序时,"Group" UIBarButtonItem 丢失了。需要旋转屏幕到横向模式再切换回纵向模式才能看到它。而如果在横向模式下启动应用程序,它就会出现。以下是一些截图以更清楚地说明:
这是应用程序在纵向模式下启动时的情况: enter image description here 这是在从纵向模式旋转后的横向模式下: enter image description here 这是从横向模式旋转回纵向模式后的情况: enter image description here
2个回答

4
几天前我也遇到了同样的问题。你需要确保详细视图是分割视图的委托。如果你试图在详细视图的viewDidLoad中设置委托,它将在分割视图加载(带有根表视图控制器)之后才设置。这就是为什么直到你切换到横屏并返回后才会出现。最好的方法是在应用程序委托实现文件中创建UISplitViewController时设置委托,或者在根表视图控制器中使用类似以下的内容设置:
- (void)viewDidLoad {
    self.splitViewController.delegate = [self.splitViewController.viewControllers objectAtIndex:1];
}

这使得详细视图委托,所以当它在tableView控制器加载后加载时,它将调用您的splitViewController:willHideViewController:...方法。

当然,这可能不是您的情况。我只是假设,因为我有完全相同的行为,它可能是相同的原因。如果这不能解决问题,只需说一声,我们会找到原因。


如果在构建它的xib中设置,它似乎也可以始终正常工作。 - Peter DeWeese
这是非常正确的。如果您可以避免以编程方式创建splitViewController,它会使生活变得更加轻松,因为它为您设置了所有内容。这只是一种解决方案,用于在没有IB帮助的情况下以编程方式创建它的情况。 - justin

0

我也无法解决这个问题,因为我的代码和IB连接看起来与苹果的多个详细视图示例源代码相同。

通过将倒数第二行中的引用从左侧视图控制器类的属性self.splitViewController更改为自动传递给该方法的svc,我成功地使其正常工作。我在调试器中注意到前者由于某种原因尚未实例化。(内存位置为0x00000000)。

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

// Keep references to the popover controller and the popover button, and tell the detail view controller to show the button.
barButtonItem.title = @"Menu";
self.popoverController = pc;
self.rootPopoverButtonItem = barButtonItem;
UIViewController <SubstitutableDetailViewController> *detailViewController = [self.splitViewController.viewControllers objectAtIndex:1];
[detailViewController showRootPopoverButtonItem:rootPopoverButtonItem];

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接