У меня есть стандартный UISearchController со стандартным UISearchBar. Панель поиска отображается на панели навигации. На iOS / iPadOS все работает как положено. Но панель поиска в MacOS ведет себя по-разному.
В iOS, когда вы нажимаете на панель поиска, значок there появляется, только если в строке поиска есть текст. Это не показывает, когда нет текста. Если коснуться значка ?, текст в строке поиска будет удален. Пока все хорошо.
Но под macOS значок appears появляется сразу и остается на виду, есть ли на панели поиска текст или нет. Хуже того, когда вы нажимаете на значок,, текст не только удаляется из панели поиска, но и весь контроллер поиска отменяется. Это так же, как если бы кнопка «Отмена» была нажата. Фактически, метод UISearchBarDelegate
searchBarCancelButtonClicked
вызывается при нажатии на значок ((но не в iOS).
Для справки приведен соответствующий код в методе viewDidLoad
простого представленияконтроллер, который демонстрирует проблемы:
navigationItem.rightBarButtonItem = editButtonItem
let results = UITableViewController(style: .plain)
let sc = UISearchController(searchResultsController: results)
sc.delegate = self
sc.obscuresBackgroundDuringPresentation = true
sc.automaticallyShowsCancelButton = true
sc.hidesNavigationBarDuringPresentation = true // Setting to false causes other problems unrelated to this question
sc.searchBar.delegate = self
navigationItem.searchController = sc
В реальном приложении MacOS, таком как стандартное приложение Mail, панель поиска ведет себя так же, как UISearchBar
в iOS, а не UISearchBar
в macOS.
Это ошибка в Mac Catalyst или мне не хватает какого-либо свойства или делегата, из-за которых UISearchBar и его значок to будут работать под macOS так же, как под iOS?