кнопка навигации не отображается - PullRequest
0 голосов
/ 10 января 2019

У меня есть UINavigationItem, я пытаюсь показать UIBarButtonItem.

Теперь проблема в том, что я добавил их правильно, они работают и работают на 100%.

но они не отображаются на UINavigationBar.

Теперь для потока я делаю следующее.

1- Я прячу кнопку «назад», вот так

self.navigationItem.setHidesBackButton(isBackHidden, animated: false)

2 - Я добавляю эти 2 кнопки, используя функцию динамически во время выполнения, когда пользователь нажимает на UIButton.

let rightBarItem = UIBarButtonItem(title: "Button.Done".localized, style: .plain, target: self, action: #selector(self.saveButtonTapped))
navigationItem.rightBarButtonItem = rightBarItem     
let leftBarItem = UIBarButtonItem(title: "Button.Cancel".localized, style: .plain, target: self, action: #selector(self.cancelButtonTapped))
navigationItem.rightBarButtonItem?.tintColor = .red // still nothing    
navigationItem.leftBarButtonItem = leftBarItem

3 - Я пытался использовать эти функции и все тот же результат

self.navigationItem.setLeftBarButton(UIBarButtonItem?, animated: Bool)
self.navigationItem.setRightBarButton(UIBarButtonItem?, animated: Bool)

Резюме :

Я пытался изменить tintColor, так как они функционально работают, я думал, что это проблема цвета.

Я пытался использовать их внутри DispatchQueue.main.async {}, думая, что это может быть проблема с потоками, поскольку она динамическая.

Я отлаживал и проверял элементы в UINavigationItem, и они существуют.

Что происходит в основном:

Кнопки не отображаются, но они работают очень хорошо, если нажать на их места на UINavigationItem.

1 Ответ

0 голосов
/ 10 января 2019

Теперь проблема в том, что я добавил их правильно, они работают и работает 100%.

но они не отображаются на панели UINavigationBar.

Исходя из того, что вы упомянули, это просто проблема пользовательского интерфейса - по неизвестной причине -.

То, что вы можете сделать, чтобы убедиться, что в элементе навигации будут отображаться элементы кнопок, - это позволить элементу панели кнопок иметь настраиваемый вид. Добавление UIButton в качестве пользовательского представления для UIBarButtonItem будет допустимым, например так:

// right
let rightButton = UIButton(type: .custom)
rightButton.setTitle("Button.Done".localized, for: .normal)
rightButton.addTarget(self, action: #selector(saveButtonTapped), for: .touchUpInside)
let rightBarButtonItem = UIBarButtonItem(customView: rightButton)
navigationItem.setRightBarButton(rightBarButtonItem, animated: true)

// left
let leftButton = UIButton(type: .custom)
leftButton.setTitle("Button.Cancel".localized, for: .normal)
leftButton.addTarget(self, action: #selector(cancelButtonTapped), for: .touchUpInside)
let leftBarButtonItem = UIBarButtonItem(customView: leftButton)
navigationItem.setLeftBarButton(leftBarButtonItem, animated: true)

Следовательно, для любого необходимого обновления пользовательского интерфейса вы можете отредактировать rightButton и leftButton, например:

leftButton.layer.backgroundColor = UIColor.red.cgColor
leftButton.layer.borderWidth = 2.0
leftButton.layer.borderColor = UIColor.black.cgColor


Кроме того, я бы предположил, что нет необходимости звонить:

self.navigationItem.setHidesBackButton(isBackHidden, animated: false)

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

...