#swift #uinavigationcontroller #uibutton
#swift #uinavigationcontroller #uibutton
Вопрос:
Я пытаюсь добавить кнопку настроек в свой навигационный контроллер, поэтому у меня есть viewDidLoad(), приведенный ниже мой код не является полным кодом, поскольку stackoverflow не позволил бы мне вставить все это, но я думаю, что вся соответствующая информация приведена ниже. С этим кодом кнопка настроек не отображается на моем симуляторе. «‘ класс NewTabBar: UITabBarController {
var transparentView = UIView()
var cellId = "Cell"
override func viewDidLoad() {
super.viewDidLoad()
//TableView
slideView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.view.addSubview(middleButton)
view.addSubview(slideView) // ova e fioka view-to ;)
slideView.showsVerticalScrollIndicator = false
slideView.backgroundColor = .white
slideView.layer.cornerRadius = 15
self.moreNavigationController.navigationBar.topItem?.rightBarButtonItem?.title = "Submit"
self.moreNavigationController.navigationBar.topItem?.rightBarButtonItem?.isEnabled = false
let homeTabBarItem = generateNavController(vc: ProfileController(), title: "Home", image:#imageLiteral(resourceName: "home"))
let scheduleVC = UIStoryboard(name: "Home", bundle: nil).instantiateViewController(withIdentifier: "ScheduleTableViewController") as! ScheduleTableViewController
let workOrderTabBarItem = generateNavController(vc: scheduleVC, title: "Work Orders", image: #imageLiteral(resourceName: "baseline_close_white_24pt") )
let actionTabBarItem = generateEmptyNavController()
let requestVC = UIStoryboard(name: "Actions", bundle: nil).instantiateViewController(withIdentifier: "AddRequestSceneIdentifier") as! ActionsViewController
let requestTabBarItem = generateNavController(vc: requestVC, title: "Request", image: #imageLiteral(resourceName: "news"))
let settingsTabBarItem = generateNavController(vc: MoreSettingsViewController(), title: "More", image: #imageLiteral(resourceName: "list"))
navigationItem.rightBarButtonItem = UIBarButtonItem(
image: UIImage(named: "transport"),
style: .plain,
target: self,
action: #selector(buttonTappedAction)
)
viewControllers = [homeTabBarItem, workOrderTabBarItem, actionTabBarItem, requestTabBarItem, settingsTabBarItem]//,actionTabBarItem, requestTabBarItem, settingsTabBarItem]
NSLayoutConstraint.activate([
middleButton.widthAnchor.constraint(equalToConstant: 80),
middleButton.heightAnchor.constraint(equalToConstant: 80),
middleButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
middleButton.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -15),
])
//actions
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture)) //gesture recognizer definicija sho da povikuva koga kje detektira (vo sluchajov swipe)
swipeDown.direction = .down
self.slideView.addGestureRecognizer(swipeDown) // dodavanje na koe view da cheka/detektira (collectionview) i koj gesture swipeDown
}
@objc func buttonTappedAction(sender: UIBarButtonItem){
print("settings tapped")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
view.bringSubviewToFront(middleButton)
}
fileprivate func generateEmptyNavController() -> UINavigationController {
let navController = UINavigationController()
return navController
}
fileprivate func generateNavController(vc: UIViewController, title: String, image: UIImage) -> UINavigationController {
//vc.navigationItem.title = title
let navController = UINavigationController(rootViewController: vc)
navController.title = title
navController.tabBarItem.image = image
return navController
}
}
}
И теперь на картинке «withoutSettingsButton» все так, как сейчас, а на картинке «withSettingsButton» все так, как должно быть, вместо красной точки должен быть значок настроек. Спасибо. Без настройки кнопки с настройкой кнопки
** приведены изображения ниже
Комментарии:
1. Пожалуйста, поделитесь кодом вашего ViewController, этого небольшого сокращения недостаточно, чтобы выявить проблему
2. Ваш код неясен, и не могли бы вы поделиться изображением текущего пользовательского интерфейса и тем, что вы ожидаете?
3. @AlexGoergisn этого достаточно? или вы предпочитаете git link с полным кодом?
4. @Kudos я вставил изображения
5. Я добавил несколько примеров кода в качестве ответа. Короче говоря: вы устанавливаете navigationItem вашего UITabBarController, который не влияет на ваши настройки. Вместо этого вы должны установить ее на каждом контроллере представления, который содержится в контроллере навигации 😉
Ответ №1:
Вы устанавливаете кнопку как левую или правую кнопку навигационного контроллера?
navigationItem.leftBarButtonItem = UIBarButtonItem(...)
или
navigationItem.rightBarButtonItem = UIBarButtonItem(...)
Ответ №2:
Вам необходимо установить navigationItem
на каждом контроллере представления, который содержит навигационный контроллер.
В вашем сценарии вы могли бы сделать следующее после настройки ViewControllers.
...
viewControllers = [homeTabBarItem, workOrderTabBarItem, actionTabBarItem, requestTabBarItem, settingsTabBarItem]//,actionTabBarItem, requestTabBarItem, settingsTabBarItem]
viewControllers?.forEach({ (controller) in
let viewController = (controller as? UINavigationController)?.topViewController ?? controller
viewController.navigationItem.rightBarButtonItem = UIBarButtonItem(
image: UIImage(named: "transport"),
style: .plain,
target: self,
action: #selector(self.buttonTappedAction)
)
})
...