Swift 在UINavigationController中添加设置按钮
我试图在导航控制器中添加一个设置按钮,因此在viewDidLoad()中 我下面的代码不是完整的代码,因为stackoverflow不允许我全部粘贴,但我认为所有相关信息都在下面。使用此代码时,设置按钮不会显示在我的模拟器上。 ''' 新ABBAR类:UITabBarController{Swift 在UINavigationController中添加设置按钮,swift,uinavigationcontroller,uibutton,Swift,Uinavigationcontroller,Uibutton,我试图在导航控制器中添加一个设置按钮,因此在viewDidLoad()中 我下面的代码不是完整的代码,因为stackoverflow不允许我全部粘贴,但我认为所有相关信息都在下面。使用此代码时,设置按钮不会显示在我的模拟器上。 ''' 新ABBAR类:UITabBarController{ var transparentView = UIView() var cellId = "Cell" override func viewDidLoad() { super.vi
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
}
}
}
现在在图片“WithingSettingsButton”上是它现在的样子,在图片“WithingSettingsButton”上是它需要的样子,而红点应该有一个设置图标。谢谢
**下面的图片是您是将该按钮设置为导航控制器的左按钮还是右按钮
navigationItem.leftBarButtonItem = UIBarButtonItem(...)
或
您需要在包含导航控制器的每个视图控制器上设置
navigationItem
在您的场景中,可以在设置ViewController后执行以下操作
...
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)
)
})
...
请分享你的ViewController的代码,这个小片段不足以发现问题你的代码不清楚,你能分享当前UI的图像和你期望的吗?@AlexGoergisn这够了吗?或者你更喜欢带有完整代码的git链接?@Kudos我插入了Pisctureresi,我添加了一些示例代码作为答案。简而言之:您正在设置UITabBarController的navigationItem,它在您的设置中不起任何作用。相反,您必须在导航控制器中包含的每个视图控制器上设置它;)
...
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)
)
})
...