添加右按钮在NavigationController
我有故事板的设置与类NavigationController: UINavigationController, UIViewControllerTransitioningDelegate
与自定义导航栏安装扩展导航控制器与CustomNavigationBar:UINavigationBar
类下面的导航控制器的所有视图控制器是NavigationController添加右按钮在NavigationController
class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
}
这里是为CustomNavigationBar
class CustomNavigationBar: UINavigationBar {
override func awakeFromNib() {
var font = UIFont(name: "Montserrat-Light", size: 17)!
if "ar" == userLocale() {
font = UIFont(name: "DroidSansArabic", size: 17)!
}
let attribtutes = [
NSFontAttributeName: font,
NSForegroundColorAttributeName: UIColor.black,
NSKernAttributeName: 5.0
] as [String : Any]
UINavigationBar.appearance().titleTextAttributes = attribtutes
UINavigationBar.appearance().tintColor = UIColor.black
UINavigationBar.appearance().backgroundColor = UIColor.white
let image = UIImage(named: "back-btn")
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -66), for: .default)
UINavigationBar.appearance().backIndicatorImage = image
}
}
代码到目前为止好,我现在想用一个自定义的视图中添加合适的栏导航项目。我试着在NavigationController::viewDidLoad()
let customView:UIView = UIView()
customView.backgroundColor = .green
customView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
let item = UIBarButtonItem(customView: customView)
self.navigationItem.setRightBarButton(item, animated: false)
这出于某种原因没有显示在导航菜单中添加了下面的代码。我哪里错了?
你需要在你的基地视图控制器添加自定义导航按钮代码的一部分,因为每一个的viewController有它自己的navigationItem
,这就是为什么您的自定义按钮没有显示
你需要使用一个BaseViewController
类的需求,然后继承所有的viewController从BaseViewController你只需要添加一次您的导航按钮自定义代码,在viewDidLoad
像这样的事情
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let customView:UIView = UIView()
customView.backgroundColor = .green
customView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
let item = UIBarButtonItem(customView: customView)
self.navigationItem.setRightBarButton(item, animated: false)
}
}
你可以符合你的NavigationController类UINavigationControllerDelegate协议和修改目标控制器在navigationController navigationItem(_ navigationController:UINavigationController的,willShow的viewController:UIViewController中,动画:布尔)方法:
extension RootNavigationController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if let viewController = viewController as? YOURCONTROLLER {
viewController.navigationItem.setRightBarButton(YOURITEM, animated: false)
}
}
你需要添加'自我.navigationItem.setRightBarButton(item,animated:false)'在您的基本视图控制器中的一部分,因为每个viewController都有它自己的navigationItem,这就是为什么您的自定义按钮没有显示。 –
正如您所见,我在NavigationController中添加了这一点。我是否还需要在所有其他ViewController中添加此项? –
如果你使用了一个baseViewController,并在他的viewDidLoad中添加了这个实现,并且让你的所有其他viewController继承了你的baseViewController,那么你只需要添加一次 –