Подтвердить что ты не робот

Кнопка отмены не отображается в UISearchBar

У меня есть UICollectionView. При нажатии кнопки поиска в UINavigationBar я добавляю UISearchController searchbar в качестве заголовка для UINavigationItem. Для iPhone он работает правильно. Для iPad кнопка cancel не отображается. Только панель поиска принимает всю ширину.

enter image description here

Может ли кто-нибудь помочь мне в этом?. Спасибо заранее.

4b9b3361

Ответ 1

iOS7 не отображает кнопку отмены при добавлении в панель навигации. Вы можете поместить панель поиска в другое представление, подобное этому.

UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *viewForSearchBar = [[UIView alloc]initWithFrame:searchBar.bounds];
[viewForSearchBar addSubview:searchBar];
self.navigationItem.titleView = viewForSearchBar;

Ответ 2

У меня была та же проблема, на iPhone отмена поиска была показана хорошо, но на iPad этого не произошло.

Обходной способ обертывания UISearchBar в другом UIView не сработал у меня, поскольку он имел разный внешний вид и неправильную ширину при вращении.

Мое решение является простым: используйте поиск WITHOUT cancel и добавьте отмену как UIBarButtonItem.

Ответ 3

Попробуйте это. Добавьте галочку для кнопки отмены отмены.

enter image description here

Ответ 4

Быстрая версия: -

Я попробовал метод @Nikita Khandelwal, но все же он не подходит для просмотра ipad. Вот быстрый код, который был задан как исправленный ответ: -

let searchBar: UISearchBar = UISearchBar()
searchBar.showCancelButton = true
searchBar.placeholder = "Search Your Job Title"
searchBar.fitToSize()
searchBar.delegate = self //do not need if you delegate searchBar
let viewForSearchBar: UIView = UIView(frame: searchBar.bounds)
viewForSearchBar.addSubview(searchBar)
self.navigationItem.titleView = viewForSearchBar

********* Но есть другой способ правильно установить кнопку отмены и подгонять для представления: -

  • Установите строку поиска в виде заголовка панели навигации: -

    let searchBar: UISearchBar = UISearchBar()
    searchBar.showCancelButton = true
    searchBar.placeholder = "Search Your Job Title"
    searchBar.delegate = self //do not need if you delegate searchBar
    self.navigationItem.titleView = searchBar
    
  • Перетащите кнопку "Бар" в правую сторону контроллера просмотра и назовите ее "Отмена".

  • Затем подключите эту кнопку к этой функции: -

    @IBAction func iPadCancelButton(sender: AnyObject) {
           UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
          self.dismissViewControllerAnimated(true, completion: nil)
    }
    

Ответ 5

Added rightBarButtonItem with selector will work fine for me. And adding searchBar inside view before setting to navigation title view was not showing properly.
Code:- 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.dismissView))
func dismissView() {
        if self.controller?.navigationController?.popViewController(animated: true) == nil {
            self.controller?.dismiss(animated: true, completion: nil)
        }
    }