displaysSearchBarInNavigationBar不显示搜索栏

时间:2014-01-29 23:01:37

标签: ios objective-c xcode

那里有大量的示例代码,我以为我是按行排队的;我的代码:

(void)viewDidLoad
{
    [super viewDidLoad];

    // init search bar
    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    searchBar.delegate = self;
    searchBar.showsCancelButton=YES;

    // set up searchDisplayController
    UISearchDisplayController *searchController = [[UISearchDisplayController alloc]
                    initWithSearchBar:searchBar contentsController:self];
    searchController.delegate = self;
    searchController.searchResultsDataSource = self;
    searchController.searchResultsDelegate = self;

    // display search bar in nav bar
    self.searchDisplayController.displaysSearchBarInNavigationBar = YES;
}

使用该代码,我不应该看到导航栏中显示的搜索栏吗?我在导航栏中看到的只是取消按钮。我在头文件中声明了协议<UISearchDisplayDelegate, UISearchBarDelegate>。我错过了什么,或者可能出现什么问题?感谢

注意: 使用self.navigationItem.titleView = searchBar,搜索栏会按预期显示。我想知道较新的{​​{1}}方法的优点是什么..

- 由tassilo编辑 -

看起来搜索栏已添加到导航栏,但随后消失。

The search bar is only displayed for a few millisecond

2 个答案:

答案 0 :(得分:1)

displaySearchBarInNavigationBar属性使搜索栏在用户点击时滑入导航栏,就像Apple Mail应用程序中发生的那样。您仍然需要将搜索栏添加到视图中。

最好的方法是将UITableViewController的tableHeaderView设置为搜索栏。

self.tableView.tableHeaderView = self.searchBar;

答案 1 :(得分:1)

这一行是你的问题。

self.searchDisplayController.displaysSearchBarInNavigationBar = YES;

self.searchDisplayController与您创建的searchDisplayController不同。

所以只需将self.searchDisplayController替换为searchDisplayController即可。另外,请确保您没有@synchronize searchDisplayController;