Как я могу сбросить элементы панели навигации, возвращаясь из всплывающего окна? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть панель навигации с двумя кнопками в качестве элементов кнопок правой панели и текстовое поле в окне заголовка. Если я коснусь текстового поля, появится экран поиска, и я могу ввести текст в текстовое поле. Тексты в текстовом поле будут устанавливать переменную resultText в моем коде ниже. Элементы кнопок, включая filterItem и mapItem, хорошо связаны с @ IBOutlet.

Я хотел бы скрыть элементы кнопок правой панели, когда текстовое поле не пустое. С кодом, показанным ниже, он отлично работает изначально, когда я ввожу текст в текстовое поле. Однако, когда я удаляю тексты в текстовом поле и затем возвращаюсь из всплывающего окна, приложение вылетает из-за того, что элементы кнопки не обнаружены. Я не понимаю, почему ноль. Я что-то здесь упускаю?

if !resultText.isEmpty {
        navigationItem.rightBarButtonItem = nil
    } else {
        navigationItem.setRightBarButtonItems([filterItem, mapItem], animated: false)     
}

1 Ответ

1 голос
/ 12 июля 2020

Вы добавляете и удаляете кнопки с панели навигации, это должно удалять ссылку из представления. Попробуйте добавить его с помощью кода -

    func addBarButtonItems() {
        let filterItemBarButton = UIBarButtonItem(title: "filterItem", style: .plain, target: self, action: #selector(filterItemTapped))
        let mapItemBarButton = UIBarButtonItem(title: "mapItem", style: .plain, target: self, action: #selector(mapItemTapped))
        navigationItem.rightBarButtonItems = [filterItemTapped, mapItemTapped]
    }

    func removeBarButtonItems() {
        navigationItem.rightBarButtonItems = nil
    }
    
    @objc private func filterItemTapped() {
      //code
    }
    
    @objc private func mapItemTapped() {
      //code
    }

Правильно вызовите эти методы в методах делегата textField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...