UISearchBar代替UINavigationController UINavigationBar

时间:2011-02-03 03:18:19

标签: iphone cocoa-touch interface-builder

我有一个UITableViewController UISearchDisplayController(和UISearchBar),其中包含UINavigationController作为根元素。是否可以对其进行配置,以便UISearchBar代替UINavigationBar?我不认为隐藏导航栏会起作用,下一个屏幕(按下)需要它可见(这会产生一个奇怪的动画故障)。

我基本上会选择 App Store 搜索标签。

我上传了一个关于它现在看起来的截图:

Default Configuration Selected Configuration

4 个答案:

答案 0 :(得分:6)

这是我的解决方案:
您不需要隐藏UINavigationBar,而是可以将UISearchBar合并到UINavigationBar中。

在YourClass.m文件中:
1.添加UISearchBar属性
2.将UISearchBar添加到viewDidLoad部分的NavigationItem中。 代码:

@interface YourClass ()
@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;
@end

@implementation YourClass
- (void)viewDidLoad 
{
  [super viewDidLoad];

  // Reveal cancel button in UISearchBar.
  searchBar.showsCancelButton = YES;

  // Add UISearchBar as titleView of the UINavigationBar.
  self.navigationItem.titleView = searchBar;
}

最后,不要忘记编辑.xib文件。只需在UINavigationBar中添加UISearchBar对象,并将UISearchBar的引用插座连接到File的Owner。 祝你好运!

答案 1 :(得分:4)

将自己指定为UINavigationController的委托并实现- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

然后使用传入的navigationController隐藏导航栏。 [navigationController setNavigationBarHidden:YES animated:animated]

编辑:想想看,最好将动画值传递给-setNavigationBarHidden:animated:。代码已更新。

答案 2 :(得分:1)

我猜你可以通过将'navigationBarHidden'属性设置为true来隐藏导航栏。

[navigationController setNavigationBarHidden:YES animated:NO];

答案 3 :(得分:1)

在你正在推动的控制器的viewDidLoad方法中

[[self navigationController] setNavigationBarHidden:NO animated:YES];