从子视图的控制器中隐藏超级视图控制器的UINavigatonBar?
我正在构建一个由UINavigationController控制多个屏幕的大型分层iPhone应用程序。其中一个屏幕能够以两种不同的格式显示内容(我使用IB创建的UITabBar在它们之间切换),并且我构建了一个视图,该视图添加了基于活动主体的子视图(从nib文件加载)标签。从子视图的控制器中隐藏超级视图控制器的UINavigatonBar?
这些子视图中的每一个都包含一个搜索栏,当它被点击时需要将导航栏推开。导航栏只能从子视图的superview控制器访问,所以我已经向每个子视图的控制器添加了superview的控制器类的前向声明。当子视图被加载时,其“superViewController”属性被设置。
通常,每个搜索栏会根据需要自动隐藏导航栏,但我需要自己实现此功能,因为栏位于搜索栏上方的视图中。
-(void)hideNavBar {
[self.navigationController setNavigationBarHidden:TRUE animated:TRUE];
}
和我也曾尝试:我曾尝试通过在
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView
方法,其中 “hideNavBar” 定义使用
[self.superViewController hideNavBar];
在superViewController.m如下这样做直接隐藏吧
[self.superViewController.navigationController setNavigationBarHidden:TRUE animated:TRUE];
在这两种情况下,酒吧都没有任何改变。我必须告诉导航栏进行更新吗?有没有更好的方法来实现我想要的功能?
我知道向前声明是否正常工作,因为我可以使用预先
NewViewController *newViewController = [[NewViewController alloc] initWithNibName:@"NewView" bundle:nil];
[self.superViewController.navigationController pushViewController:newViewController animated:YES];
[newViewController release];
由于推新视图到navigationViewController, 朱利安Ceipek
如果它的事项,导航栏被设置为半透明的,以便子视图在栏下方。
您是否尝试过使用模态视图控制器?根据每个选择,如果将模式视图控制器推到视图上,它将自动隐藏导航栏。
本质上,它是指是指被用于暂时接受用户数据的画面。如果你实现了这个功能,它会在导航栏进入视图时自动隐藏,因为它由视图控制器拥有,并且不会被推到导航控制器堆栈上。
我想过使用类似的东西,但它仍然不会据我所知,解决我的问题。我希望导航栏保持在屏幕上,以便用户可以浏览应用程序。我只希望酒吧暂时消失,而用户正在与搜索框或滚动进行交互。 我也不太愿意使用基于Apple指南的模式视图控制器,因为我需要用户能够在视图层次结构中访问和修改比在我的问题中提到的超级视图更低的视图。 – 2011-06-14 18:35:34
如果您希望导航栏保留在屏幕上,为什么不将新视图放到navigationController堆栈上?根据按下哪个按钮,您可以推送相应的视图,并显示/隐藏该视图控制器的导航栏。它比试图操纵superview的navigationBar更干净。 – cone 2011-06-16 04:17:38
谢谢!我得到它使用这里描述的方法工作:http://stackoverflow.com/questions/410471/how-can-i-pop-a-view-from-a-uinavigationcontroller-and-replace-it-with-other -in/1787323#1787323 这个解决方案唯一令人讨厌的事情是,它需要一个单独的标签栏,不会在每个视图上切换其所选项目。 – 2011-06-16 15:02:23
和@cone你有问题的答案吗?如何解决这个问题呢?你可以帮我吗?这是我的问题: - http://stackoverflow.com/questions/6381161/how-to-hide-superview-navigationbar-in-subview-in-ipad – 2011-06-17 07:33:34