我正在构建一个具有由UINavigationController控制的多个屏幕的大型分层iPhone应用程序。其中一个屏幕能够以两种不同的格式显示内容(我使用IB创建的UITabBar在它们之间切换),我构建了这个屏幕,其中的视图添加了一个基于活动的子视图(从nib文件加载)标签
这些子视图中的每一个都包含一个搜索栏,需要在点击导航栏时将其推开。导航栏只能从子视图的superview的控制器访问,所以我在每个子视图的控制器中添加了superview的控制器类的前向声明。加载子视图时,会设置其“superViewController”属性。
通常,每个搜索栏会根据需要自动隐藏导航栏,但我需要自己实现此功能,因为栏位于搜索栏上方的视图中。我试过使用
尝试这样做[self.superViewController hideNavBar];
中的
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView
方法,其中“hideNavBar”在superViewController.m中定义如下:
-(void)hideNavBar {
[self.navigationController setNavigationBarHidden:TRUE animated:TRUE];
}
我也试过用
直接隐藏吧台[self.superViewController.navigationController setNavigationBarHidden:TRUE animated:TRUE];
在这两种情况下,酒吧都没有任何改变。我是否必须告诉导航栏以某种方式更新?有没有更好的方法来实现我想要的功能?
我知道前向声明工作正常,因为我可以使用
将新视图推送到navigationViewController NewViewController *newViewController = [[NewViewController alloc] initWithNibName:@"NewView" bundle:nil];
[self.superViewController.navigationController pushViewController:newViewController animated:YES];
[newViewController release];
提前致谢, Julian Ceipek
如果重要,导航栏设置为半透明,以便子视图位于栏下方。
答案 0 :(得分:0)
您是否尝试过使用模态视图控制器?根据每个选择,如果将模态视图控制器推到视图上,它将自动隐藏导航栏。
本质上,它是一个用于临时接受用户数据的屏幕。如果你实现它,它会在进入视图时自动隐藏导航栏,因为它由提供它的视图控制器所拥有,而不会被推送到导航控制器堆栈。