UINavigationController 右键消失
UINavigationController rightbutton disappears
我正在尝试将主页按钮添加到导航控制器。因此,我在下面创建了 class 并 class 编辑了我的导航控制器。我的按钮出现在我的第一个视图中。当我导航到其他视图(我图片中的 table 视图)时,添加的按钮消失了。我正在使用 segues 推送到另一个视图。
class ThemedNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
var home = UIBarButtonItem(image: UIImage(named: "home"), style: UIBarButtonItemStyle.Plain, target: self, action: "doneAction")
navigationBar.topItem?.rightBarButtonItem = home
navigationBar.barTintColor = anaRenk
navigationBar.barStyle = .Black
navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!]
UIBarButtonItem.appearance().setTitleTextAttributes(
[NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!],
forState: .Normal)
}
func doneAction() { // [6]
self.navigationController?.popToRootViewControllerAnimated(true)
}
}
之前我的 mainViewController 没有导航控制器。相反,每个按钮都在推动具有独立导航控制器的新视图控制器,并且我的代码正在运行。如果您能告诉我如何解决此问题,我将不胜感激。
您必须在每个控制器中添加按钮,因为在按下时每个控制器的导航栏都会更新。因此,为什么后退按钮标签会发生变化。
因此,在您想要主页按钮的每个控制器中放置相同的代码。
我不会将任何代码放入导航控制器本身。从您想要弹出主页的第一个控制器开始。
在使用故事板时更容易拖动条形按钮项目,然后为其创建弹出到根目录的动作。
我想我做到了。它有效,但我不确定它是否是最好的方法。如果您对任何可能的内存泄漏或崩溃问题发表评论,我将不胜感激。谢谢
class ThemedNavigationController: UINavigationController {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
var home:UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
home = UIBarButtonItem(image: UIImage(named: "home"), style: UIBarButtonItemStyle.Plain, target: self, action: "doneAction")
navigationBar.barTintColor = anaRenk
navigationBar.barStyle = .Black
navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!]
UIBarButtonItem.appearance().setTitleTextAttributes(
[NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!],
forState: .Normal)
}
override func pushViewController(viewController: UIViewController, animated: Bool) {
var exbutton = viewController.navigationItem.rightBarButtonItem?
if exbutton == nil {
viewController.navigationItem.rightBarButtonItem = home
}
else {
viewController.navigationItem.rightBarButtonItems?.insert(home, atIndex: 0)
}
super.pushViewController(viewController, animated:animated)
}
func doneAction() { // [6]
popToRootViewControllerAnimated(true)
}
}
我正在尝试将主页按钮添加到导航控制器。因此,我在下面创建了 class 并 class 编辑了我的导航控制器。我的按钮出现在我的第一个视图中。当我导航到其他视图(我图片中的 table 视图)时,添加的按钮消失了。我正在使用 segues 推送到另一个视图。
class ThemedNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
var home = UIBarButtonItem(image: UIImage(named: "home"), style: UIBarButtonItemStyle.Plain, target: self, action: "doneAction")
navigationBar.topItem?.rightBarButtonItem = home
navigationBar.barTintColor = anaRenk
navigationBar.barStyle = .Black
navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!]
UIBarButtonItem.appearance().setTitleTextAttributes(
[NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!],
forState: .Normal)
}
func doneAction() { // [6]
self.navigationController?.popToRootViewControllerAnimated(true)
}
}
之前我的 mainViewController 没有导航控制器。相反,每个按钮都在推动具有独立导航控制器的新视图控制器,并且我的代码正在运行。如果您能告诉我如何解决此问题,我将不胜感激。
您必须在每个控制器中添加按钮,因为在按下时每个控制器的导航栏都会更新。因此,为什么后退按钮标签会发生变化。
因此,在您想要主页按钮的每个控制器中放置相同的代码。
我不会将任何代码放入导航控制器本身。从您想要弹出主页的第一个控制器开始。
在使用故事板时更容易拖动条形按钮项目,然后为其创建弹出到根目录的动作。
我想我做到了。它有效,但我不确定它是否是最好的方法。如果您对任何可能的内存泄漏或崩溃问题发表评论,我将不胜感激。谢谢
class ThemedNavigationController: UINavigationController {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
var home:UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
home = UIBarButtonItem(image: UIImage(named: "home"), style: UIBarButtonItemStyle.Plain, target: self, action: "doneAction")
navigationBar.barTintColor = anaRenk
navigationBar.barStyle = .Black
navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!]
UIBarButtonItem.appearance().setTitleTextAttributes(
[NSFontAttributeName: UIFont(name: sansSerifName, size: 17)!],
forState: .Normal)
}
override func pushViewController(viewController: UIViewController, animated: Bool) {
var exbutton = viewController.navigationItem.rightBarButtonItem?
if exbutton == nil {
viewController.navigationItem.rightBarButtonItem = home
}
else {
viewController.navigationItem.rightBarButtonItems?.insert(home, atIndex: 0)
}
super.pushViewController(viewController, animated:animated)
}
func doneAction() { // [6]
popToRootViewControllerAnimated(true)
}
}