在导航栏中显示搜索栏的displaysSearchBarInNavigationBar无法显示搜索栏。

3

有很多示例代码可供参考,我认为我按照它的每一行来编写我的代码:

(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,搜索栏会按预期显示。我不知道新的displaysSearchBarInNavigationBar方法有什么优点。
--由tassilo编辑--
看起来搜索栏被添加到导航栏,但随后消失了。
图片链接: https://istack.dev59.com/a3fND.webp https://istack.dev59.com/YNTko.webp
2个回答

1
这行是你的问题。
self.searchDisplayController.displaysSearchBarInNavigationBar = YES;

self.searchDisplayController 不等于你创建的 searchDisplayController

所以只需用 searchDisplayController 替换 self.searchDisplayController。同时,请确保你没有使用 @synchronize searchDisplayController;


1

displaysSearchBarInNavigationBar属性使得搜索栏在用户点击时可以向导航栏滑入,就像在苹果的邮件应用中发生的那样。但是您仍然需要在视图中添加搜索栏。

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

self.tableView.tableHeaderView = self.searchBar;

我不知道为什么你被踩了。这对我很有用。非常感谢! - Alain Stulz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接