繁体   English   中英

如何在UISearchBar中设置文本而不激活UISearchDisplayController

[英]How to set text in UISearchBar without activating UISearchDisplayController

我在我的应用程序中使用了UISearchDisplayController。 当用户选择返回的搜索结果中的项目时,我将停用UISearchDisplayController。 取消激活控制器会清除用户键入的文本。 我想把它留在那里。 我可以通过在取消激活控制器后再次设置它来强制文本回到UISearchBar。

像这样:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:YES];
self.searchDisplayController.searchBar.text = searchText;

哪个有效。

但是,如果我没有为停用呼叫设置动画,我会看到时间问题。 像这样调用setActive:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:NO];
self.searchDisplayController.searchBar.text = searchText;

导致UISearchDisplayController再次变为活动状态!

是否有一种方法可以设置UISearchBar的文本,而不会使与之关联的UISearchDisplayController变为活动状态? 有什么其他建议来解决这种行为吗?

对于其他任何想知道如何做到这一点的人,我设法通过在我的委托中添加它来使其工作:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    if(!controller.isActive){
        controller.searchResultsTableView.hidden = YES;
        return NO;
    }
    controller.searchResultsTableView.hidden = NO;

    [....]

    return YES;
}

亚伦的回答很好。 通过编辑您的代码安静,一种更简单的做事方式:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:NO];
self.searchDisplayController.delegate = nil;
self.searchDisplayController.searchBar.text = searchText;
self.searchDisplayController.delegate = self; //or any delegate you like!

这样,在设置搜索栏文本时,不会触发任何代理功能。

在Apple的内部论坛中,有人提出了一种解决方法,即在UISearchDisplayController停用时将searchBar的占位符文本设置为最后一个搜索文本。 它出现在框中,但它是灰色的。 不理想,但可能是可以接受的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM