#ios #swift #uinavigationbar #uibarbuttonitem
#iOS #swift #uinavigationbar #uibarbuttonitem
Вопрос:
Я установил rightBarButton
navigationBar
программно, но это не отображается, хотя заголовок отображается нормально.
Вот моя форма кода AppDelegate
:
UINavigationBar.appearance().barTintColor = APP_COLOR
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.font:Constants.APP_REGULAR_FONT_WITH_SIZE(size: 18), NSAttributedString.Key.foregroundColor : UIColor.white]
И вот код из моего viewController
, который я пытаюсь добавить rightBarButton
.
override func viewDidLoad()
{
super.viewDidLoad()
let rightBarButton = UIBarButtonItem(image: UIImage(named: "logout"), style: .plain, target: self, action: #selector(logoutButtonTapped))
self.navigationController?.navigationItem.rightBarButtonItem = rightBarButton
}
Я также попытался удалить настройки внешнего вида, но кнопка все еще не видна.
Комментарии:
1. Где вы устанавливаете заголовок (Naeem) этого экрана?
2. попробуйте распечатать self.NavigationController, посмотрите, нет ли его нуля
3. @Adeel в представлении появится, я получаю данные из базы данных, а затем устанавливаю имя в качестве заголовка навигации
4. @AgentChocks. нет, это не нулевой брат
5. @Adeel когда я захожу на этот контроллер из RootViewController, он не отображается, но когда я прихожу сюда с другого контроллера, а не с RootViewController, он показывает
Ответ №1:
let rightBarButton = UIBarButtonItem(image: UIImage(named: "test"), style: .plain, target: self, action: #selector(logoutButtonTapped))
self.navigationController?.navigationBar.topItem?.rightBarButtonItem = rightBarButton
теперь это работает для меня
Ответ №2:
Вы можете удалить self.navigationController?.
в своем коде.
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(logoutButtonTapped))
}
Комментарии:
1. по-прежнему не отображается, когда я захожу на этот контроллер из корневого ViewController, тогда это не отображается, когда приходит с другого контроллера, тогда это показывает.
Ответ №3:
Не используйте self.NavigationController?.navi … вместо этого используйте self.navigationItem.rightBarButton…
override func viewDidLoad()
{
super.viewDidLoad()
let rightBarButton = UIBarButtonItem(image: UIImage(named: "logout"), style: .plain, target: self, action: #selector(logoutButtonTapped))
self.navigationItem.rightBarButtonItem = rightBarButton
}
Надеюсь, ваша проблема будет решена с помощью этого кода. Спасибо.
Комментарии:
1.по-прежнему не отображается, когда я захожу на этот контроллер из корневого ViewController, тогда это не отображается, когда приходит с другого контроллера, тогда это показывает.
2. как вы пришли к этому контроллеру?
window?.rootViewController = UINavigationController(rootViewController: ViewController())
вы использовали этот код или нет? позвольте мне посмотреть ваш код вызова этого контроллера, чтобы я мог знать, как вы добираетесь до этого контроллера.3. если вы не использовали это
window?.rootViewController = UINavigationController(rootViewController: ViewController())
, вы не увидите панель навигации в своем представлении. И если вы пришли с определенного контроллера, вам следует использоватьself.navigationController?.pushViewController(ViewController(), animated: true)
. Если у вас нет этого кода, вы не получите панель навигации.4. пусть chatHistoryVC = self.storyboard? .instantiateViewController(с идентификатором: «ChatHistoryVC») как! ChatHistoryVC self.NavigationController?.setViewControllers([chatHistoryVC], анимированный: true)
5.
let storyBoard: UIStoryboard = UIStoryboard(name: "Storyboard", bundle: nil) let programSchedule = storyBoard.instantiateViewController(withIdentifier: "SessionFeedbackController") as! SessionFeedbackController self.navigationController?.pushViewController(programSchedule, animated: false)
попробуйте этот код, я думаю, он должен работать для вас.