UINavigationController右键按钮消失

时间:2015-02-07 16:11:01

标签: ios swift uinavigationcontroller

我正在尝试将Home按钮添加到导航控制器。因此我创建了下面的类和子类我的导航控制器。我的按钮出现在我的第一个视图中。当我导航到其他视图(我的图片中的表格视图)时,添加的按钮消失。我正在使用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)

    }
}

enter image description here

在我的mainViewController没有导航控制器之前。相反,每个按钮都在推动具有独立导航控制器的新视图控制器,而我的代码正在运行。如果您能告诉我如何解决此问题,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

您必须在每个控制器中添加按钮,因为按下时每个控制器的导航栏都会更新。因此后退按钮标签发生变化的原因。

因此,在每个想要主页按钮的控制器中放置相同的代码。

我不会将任何代码放在Nav控制器本身中。从你想要回家的第一个控制器开始。

在使用情节提要板时更容易拖动一个条形按钮项,然后为其弹出一个根目录的动作。

答案 1 :(得分:0)

我想我成功了。它有效,但我不确定它是否是最好的方法。如果您评论任何可能的内存泄漏或崩溃问题,我将不胜感激。感谢。

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)
    }
}