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

Получить строку поиска в панели навигации в Swift

Итак, я пробовал все, чтобы найти панель поиска в панели навигации в Swift. Но, к сожалению, я не работал, пока...

Для тех из вас, кто не знает, о чем я говорю, я пытаюсь сделать что-то вроде этого

enter image description here

Обратите внимание на панель поиска на панели навигации. Итак, вот что я сейчас использую

self.searchDisplayController?.displaysSearchBarInNavigationBar = true

Я вытащил это в моем viewDidLoad, а затем, когда загрузил приложение, которое мне представлено, просто пустая панель навигации....:( Любые идеи?

4b9b3361

Ответ 1

Попробуй это

let leftNavBarButton = UIBarButtonItem(customView:Yoursearchbar)
  self.navigationItem.leftBarButtonItem = leftNavBarButton

Обновить

Вы сохраняете ленивую собственность UISearchBar

lazy   var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20))

В viewDidLoad

searchBar.placeholder = "Your placeholder"
var leftNavBarButton = UIBarButtonItem(customView:searchBar)
self.navigationItem.leftBarButtonItem = leftNavBarButton

Если вы хотите использовать раскадровку, просто перетащите панель поиска в качестве розетки, а затем замените свойство lazy на панель поиска розетки.

Ответ 2

    // create the search bar programatically since you won't be
    // able to drag one onto the navigation bar
    searchBar = UISearchBar()
    searchBar.sizeToFit()

    // the UIViewController comes with a navigationItem property
    // this will automatically be initialized for you if when the
    // view controller is added to a navigation controller stack
    // you just need to set the titleView to be the search bar
    navigationItem.titleView = searchBar

Ответ 3

В вашем представлении контроллер:

lazy var searchBar = UISearchBar(frame: CGRectZero)

override func viewDidLoad() {
    super.viewDidLoad()

    searchBar.placeholder = "Search"

    navigationItem.titleView = searchBar
}

Сделав это, установив navigationItem.titleView, панель поиска автоматически центрируется по всем устройствам iPhone и iPad. Примечание: проверено только с v8.4 и v9.0

для SWIFT 3

lazy var searchBar = UISearchBar(frame: CGRect.zero)

Ответ 4

    let searchBar = UISearchBar()
    searchBar.sizeToFit()
    searchBar.placeholder = ""
    self.navigationController?.navigationBar.topItem?.titleView = searchBar

Ответ 5

Для iOS 11 и выше

navigationItem.searchController = searchController

enter image description here

Для iOS 10 и ниже

navigationItem.titleView = searchController.searchBar;

enter image description here

или вы можете назначить его как leftBarButtonItem, как описано в этом ответе

Ответ 6

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

    searchBar.endEditing(true)
    searchBar.text = nil
    print("## search btn clicked : \(searchBar.text ?? "")")
} 

Ответ 7

Для Свифта 4 и 5.

let searchBar = UISearchBar() self.navigationItem.titleView = searchBar

    let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: nil)

    cancelButton.tintColor = #colorLiteral

    searchBar.tintColor = #colorLiteral

    self.navigationItem.rightBarButtonItem = cancelButton

Ответ 8

Установка SearchBar в качестве titleView, изменяет высоту navigationBar на 56. Чтобы это исправить, вы можете встроить searchBar в представление и установить его как titleView.

    var offset: CGFloat = 20

    // If VC is pushed, back button should be visible
    if navigationController?.navigationBar.backItem != nil {
        offset = 40
    }

    let customFrame = CGRect(x: 0, y: 0, width: view.frame.size.width - offset, height: 44.0)
    let searchBarContainer = UIView(frame: customFrame)
    searchBar = UISearchBar(frame: customFrame)
    searchBarContainer.addSubview(searchBar)
    navigationItem.titleView = searchBarContainer

Ответ 9

В 2019 году вы должны использовать UISearchController.

override func viewDidLoad() {
    super.viewDidLoad()

    let searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self.viewModel
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search artists"
    self.navigationItem.searchController = searchController
    self.definesPresentationContext = true
}

И какой-то класс должен соответствовать UISearchResultsUpdating. Я обычно добавляю это как расширение к моей ViewModel.

extension ArtistSearchViewModel: UISearchResultsUpdating {

func updateSearchResults(for searchController: UISearchController) {
    print("Searching with: " + (searchController.searchBar.text ?? ""))
    let searchText = (searchController.searchBar.text ?? "")
    self.currentSearchText = searchText
    search()
    }
}

Это создаст что-то вроде этого:

search bar

Ответ 10

Для Свифта 4 и 5.

Вставьте ваш View Controller в навигационный контроллер

let searchBar = UISearchBar()
self.navigationItem.titleView = seachBar
[Here is a screenshot.][1]
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: 
cancelButton.tintColor = #colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 

searchBar.tintColor = #colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 
self.navigationItem.rightBarButtonItem = cancelButton