【问题标题】:searchBarCancelButtonClicked delegate method is not called. Is there any way to call?未调用 searchBarCancelButtonClicked 委托方法。有什么方法可以打电话吗?
【发布时间】:2011-05-21 02:11:30
【问题描述】:

UIViewController 实现一个视图来放置一个 UITableView UISearchBar 并被实现。但是你不能调用searchBarCancelButtonClicked。不知道是什么原因。

【问题讨论】:

  • 我也有同样的问题。我的视图控制器是搜索栏的代理,它采用 UISearchBarDelegate 协议。
  • 我也有同样的问题。一切都应该正确设置。所有其他委托方法都被调用,但这个没有。如果找到原因,我会很高兴。
  • 检查这个问题。它帮助了我。 stackoverflow.com/questions/6004438/…
  • 谢谢derpoliuk,这就是发生在我身上的事!

标签: iphone uisearchbar uisearchbardelegate


【解决方案1】:

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

【讨论】:

  • 这就是我的方式......所有其他委托方法都可以工作,只是这个没有被调用,可能是sdk的一个错误
  • @samiq 我似乎也有这个问题。这是在 iOS 7 中!
  • 添加了searchController.searchBar.delegate = self并调用了该方法。谢谢。
  • @Isuru 我遇到了同样的问题。有什么解决办法吗?
  • @ShivamPokhriyal 这是很久以前的事了,伙计。老实说,我不记得我做了什么。对不起。
【解决方案2】:
- (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】:

当我在 UIScrollView 中有一个 UISearchBar 时,我遇到了同样的问题。据我了解,您在 UITableView 中遇到了问题,它是 UIScrollView 的子类。

对我来说有帮助的是设置

tableView.delaysContentTouches = NO;

似乎searchBarCancelButtonClicked 方法不适用于设置为YES 的默认设置。

【讨论】:

【解决方案4】:

searchBarCancelButtonClicked 没有触发的原因可能是因为你的 UISearchBar 没有显示取消按钮。您可以像这样显示取消按钮:

searchBar.showsCancelButton = true

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

【讨论】:

  • 在我的情况下,我点击了栏窗口中的 x --> 这不是取消按钮。 [我在想它是...] 使用这行代码导致“取消”一词出现在我的栏的右侧,然后我意识到我的错误。谢谢!
【解决方案5】:

在我的例子中是一个不受控制的 userInteractionEnabled=NO

【讨论】:

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      此行删除 UISearchController 透明视图

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

      【讨论】:

        【解决方案8】:

        对我来说真正的原因是我认为小 x 按钮是取消按钮的意思,但事实并非如此......如果您遇到同样的问题,请使用以下代码

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

        【讨论】:

          【解决方案9】:

          试着把它放在 viewDidLoad 中。在我的情况下,有时取消按钮操作委托“searchBarCancelButtonClicked”已触发,有时未触发(只是键盘被关闭并且取消按钮变得不活动),添加后一切都开始按预期工作。

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

          【讨论】:

            【解决方案10】:

            斯威夫特 4.2

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

             definesPresentationContext = true
            

            【讨论】:

            • 请解释这与问题有何关系。
            • 我不知道,这与问题有何关系。但在我的情况下 self.definesPresentationContext = true 就像一个冠军。
            猜你喜欢
            • 1970-01-01
            • 2011-08-12
            • 1970-01-01
            • 1970-01-01
            • 2015-06-09
            • 2016-07-16
            相关资源
            最近更新 更多