我在 UISplitViewController 的右侧 View Controller 中缺少带弹出窗口的导航项。当我将 iPad 旋转到纵向时,按钮不会出现。代码很好,我已经多次使用相同的代码(当然不是绝对),但现在我遇到了这个奇怪的错误。
- (void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)pc
{
barButtonItem.title = aViewController.title;
self.navigationItem.rightBarButtonItem = barButtonItem;
/*
this method gets called, class is set to be delegate of split view,
barButtonItem && self.navigationItem are not nils.
*/
}
- (void)splitViewController:(UISplitViewController *)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)button
{
self.navigationItem.rightBarButtonItem = nil;
}
所有这些东西都是使用这样的代码创建的...
UISplitViewController *svc = [[UISplitViewController alloc] init];
UINavigationController *rightNav = [[UINavigationController alloc] init];
DetailViewController *dvc = [[DetailViewController alloc] initWithSomeArgs:args];
[rightNav pushViewController:dvc animated:NO];
svc.delegate = dvc;
svc.viewControllers = [NSArray arrayWithObjects:tabBarController, rightNav, nil];
// tabBar is good, not nil and working well on the iPhone
[self.window addSubview:svc.view];
[dvc release]; [rightNav release];
我不知道为什么这不起作用,我需要尽快弄清楚。请帮助我。
最佳答案
我遇到了类似的问题。我有一个 Master-Detail 应用程序并且正在使用 Storyboards。我的细节 View Controller 嵌入在导航 Controller 中。 UISplitViewControllerDelegate 方法已正确实现,并在设备旋转时调用它们。栏按钮已正确添加,但不可见。
问题原因:在我的详细 View Controller 的 Storyboard中,我手动添加了一个导航栏,否则我没有看到任何导航栏。但是,这与我添加按钮的导航栏不同。正确的导航栏隐藏在 Storyboard中,因此在我的应用中不可见。
解决方案:我转到 Storyboards 中的 Detail View Controller 并删除了我手动添加的导航栏。然后,我点击了导航 Controller 。在“属性检查器”下,我选中了标有“显示导航栏”的框。现在,正确的栏在我的导航 Controller 和详细 View Controller 以及我的应用程序中都可见。
关于objective-c - UISplitViewController 中缺少 UIBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754952/