如何更新工具栏按钮

时间:2017-01-20 11:43:16

标签: ios swift cosmicmind

我正在使用this现象框架,并且无法更新工具栏上的按钮。我按照NavigationDrawerController的示例代码。所以最初,工具栏左侧是menuButton,右侧是另外两个按钮:

// From AppToolbarController.swift
fileprivate func prepareToolbar() {
    toolbar.leftViews = [menuButton]
    toolbar.rightViews = [switchControl, moreButton]
}

现在,当我想从另一个ViewController更改工具栏中的按钮时,我(我很天真)执行以下操作:

// From RootViewController.swift
fileprivate func prepareToolbar() {
    guard let tc = toolbarController else {
        return
    }

    tc.toolbar.rightViews = [someOtherButton]
}

然而,这没有效果,按钮保持不变。当之前未设置toolbar.rightViews时,此方法仅适用于我。

更新工具栏按钮的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为问题可能是您从Toolbar函数调用更新prepareToolbarviewDidLoad)函数。问题是RootViewController实际上并未与toolbarController相关联。尝试将prepareToolbar函数移动到视图控制器的viewWillAppear函数。如果这没有帮助,你能显示代码设置吗?一切顺利!

代码示例:

class RootViewController: UIViewController {
    fileprivate var remindersButton: IconButton!

    open override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = Color.white
    }

    open override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        prepareRemindersButton()
        prepareToolbar()
    }
}

extension RootViewController {
    fileprivate func prepareRemindersButton() {
        remindersButton = IconButton(image: Icon.cm.bell, tintColor: .white)
        remindersButton.pulseColor = .white
    }

    fileprivate func prepareToolbar() {
        guard let toolbar = toolbarController?.toolbar else {
            return
        }

        toolbar.title = "Material"
        toolbar.titleLabel.textColor = .white
        toolbar.titleLabel.textAlignment = .left

        toolbar.detail = "Build Beautiful Software"
        toolbar.detailLabel.textColor = .white
        toolbar.detailLabel.textAlignment = .left

        toolbar.rightViews = [remindersButton]
    }
}