2011-01-21 33 views
4

我在UISplitViewController里面的右侧视图控制器中弹出了导航项与弹出窗口。当我将iPad旋转到纵向时,只有该按钮不会出现。代码很好,我使用了同一个(当然不是绝对的),但是现在我有了这个奇怪的错误。UISplitViewController中缺少UIBarButtonItem

- (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];

我不知道为什么不工作,我需要尽快弄清楚。请帮帮我。

+0

当你[自setPopoverController:pc];在第一个方法(和[self setPopoverController:nil];第二个)? –

+0

DetailViewController中没有属性popoverController – Woyo

回答

0

它看起来像你已经错过了你的DetailViewController和UISplitViewController之间的引用出口。

+0

但是每次都成功调用委托方法。 – Woyo

1

我有类似的问题。我有一个Master-Detail应用程序并正在使用Storyboard。我的详细信息视图控制器嵌入在导航控制器中。 UISplitViewControllerDelegate方法正确实现,并且在设备旋转时被调用。酒吧按钮被正确添加,但不可见。

问题的原因:在我的Detail View Controller中的故事板中,我手动添加了一个导航栏,因为我没有看到任何导航栏。但是,这与我添加按钮的导航栏并不相同。正确的导航栏隐藏在Storyboard中,因此在我的应用程序中不可见。

解决方案:我去了我的故事板中的详细视图控制器,并删除了我手动添加的导航栏。然后,我点击了导航控制器。在“属性检查器”下,我检查了标记为“显示导航栏”的框。现在,在我的导航控制器和我的详细视图控制器以及我的应用程序中都可以看到正确的栏。