不调用searchBarCancelButtonClicked委托方法。有什么方法可以打电话吗?

时间:2010-12-06 16:21:03

标签: iphone uisearchbar uisearchbardelegate

UIViewController实现放置UITableView UISearchBar并正在实现的视图。但你不能调用searchBarCancelButtonClicked。不知道是什么原因。

10 个答案:

答案 0 :(得分:6)

确保将UIViewController设置为UISearchBar的委托,并且它采用UISearchBarDelegate协议。

答案 1 :(得分:6)

searchBarCancelButtonClicked无法触发的原因可能是因为您的UISearchBar未显示“取消”按钮。您可以像这样显示“取消”按钮:

searchBar.showsCancelButton = true

我遇到了同样的问题,并按照预期使取消按钮显示为searchBarCancelButtonClicked。

答案 2 :(得分:5)

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
   // This method has been called when u enter some text on search or Cancel the search.
   // so make some condition for example:

   if([searchText isEqualToString:@""] || searchText==nil) {
        // Nothing to search, empty result.
        searching = NO;
        [mytableView reloadData];
    }
}

希望它有所帮助。

答案 3 :(得分:1)

在我的情况下是一个不受控制的userInteractionEnabled = NO

答案 4 :(得分:0)

searchController.searchBar.delegate = self,而不仅仅是searchController.delegate = self

答案 5 :(得分:0)

此行删除UISearchController透明视图

let searchController = UISearchController(searchResultsController: nil)
searchController.dimsBackgroundDuringPresentation = false

答案 6 :(得分:0)

对我来说,真正的原因是我认为小x按钮是取消按钮,但这不是...如果您遇到相同的问题,请使用以下代码

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        if searchText.isEmpty {
            searchRecords.removeAll()
            searchTableView.reloadData()
        }
    }

答案 7 :(得分:0)

尝试将其放在viewDidLoad中。就我而言,添加所有东西后,有时取消按钮动作委托“ searchBarCancelButtonClicked”已触发,有时没有触发(只是键盘被关闭,取消按钮未激活)。

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).isEnabled = true

答案 8 :(得分:0)

Swift 4.2

我遇到了同样的问题,必须在searchBarCancelButtonClicked方法起作用之前将definePresentationContext属性设置为true。

 definesPresentationContext = true

答案 9 :(得分:-3)

当我在UIScrollView中有一个UISearchBar时遇到了同样的问题。据我所知,你在UITableView中有这个问题,UITableView是UIScrollView的子类。

在我的案例中有什么帮助设置

tableView.delaysContentTouches = NO;

似乎searchBarCancelButtonClicked方法在设置为YES时效果不佳,这是默认设置。