Метод делегата searchBarCancelButtonClicked не вызывается. Есть ли способ позвонить?

UIViewController для реализации представления для размещения UITableView UISearchBar и реализации. Но вы не можете вызвать searchBarCancelButtonClicked. Не знаю в чем причина.

7 ответов

Причина, по которой searchBarCancelButtonClicked не запускается, может заключаться в том, что ваш UISearchBar не показывает кнопку Отмена. Вы можете отобразить кнопку Отмена следующим образом:

searchBar.showsCancelButton = true

У меня была та же проблема, и показ кнопки "Отмена" вызвал срабатывание searchBarCancelButtonClicked, как и ожидалось.

Убедитесь, что ваш UIViewController установлен в качестве делегата вашего UISearchBar и что он принимает протокол UISearchBarDelegate.

- (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];
    }
}

Надеюсь, поможет.

В моем случае был неконтролируемый userInteractionEnabled=NO

searchController.searchBar.delegate = self, не просто searchController.delegate = self

Реальная причина для меня заключалась в том, что я думал, что маленькая кнопка х была означенной кнопкой отмены, но это не так... если у вас возникла та же проблема, с которой я столкнулся, используйте приведенный ниже код

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

Swift 4.2

У меня была та же проблема, и я должен был установить для свойства definePresentationContext значение true, прежде чем метод searchBarCancelButtonClicked будет работать.

 definesPresentationContext = true

Попробуйте поместить это в viewDidLoad. В моем случае иногда срабатывает кнопка "Отменить действие" делегата "searchBarCancelButtonClicked", а иногда - нет (просто клавиатура отклонена и кнопка "Отмена" становится неактивной), после добавления этого все стало работать как положено.

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

Эта строка удаляет прозрачное представление UISearchController

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

Я столкнулся с той же проблемой, когда у меня был UISearchBar внутри UIScrollView. Как я понимаю, вопрос у вас был внутри UITableView, который является подклассом UIScrollView.

Что помогло в моём случае, так это настройка

tableView.delaysContentTouches = NO;

Кажется searchBarCancelButtonClicked метод не работает с этим набором YES, который является настройкой по умолчанию.

Другие вопросы по тегам