UIBarButtonItems以编程方式使用Swift创建,不可见

时间:2016-08-21 07:32:55

标签: swift uinavigationcontroller uibarbuttonitem uitoolbar uitabbaritem

我不确定为什么应该在导航控制器的工具栏中嵌入两个条形按钮项的代码片段无法正常工作。当我运行代码时,工具栏本身是可见的,而不是条形按钮项。我在这做错了什么?谢谢你的关注。

class NavigationController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //Tool bar appearance
        toolbar.barTintColor = UIColor.blackColor()


        //Show tool bar by default
        self.navigationController?.toolbarHidden = false

        //Icons all located in images.xcassets
        let homeImage = UIImage(named: "home")
        let gameImage = UIImage(named: "logo")

        var toolBarItems = [UIBarButtonItem]()

        let homeButton = UIBarButtonItem(image: homeImage, style: UIBarButtonItemStyle.Plain, target: self, action: #selector(NavigationController.toHome))
        homeButton.title = "Home"


        let gameButton = UIBarButtonItem(image: gameImage, style: UIBarButtonItemStyle.Plain, target: self, action: #selector(NavigationController.toGame))
        homeButton.title = "Game"

        //Place the bar items in toolBarItems array
        toolBarItems.append(homeButton)
        toolBarItems.append(gameButton)

        //self.toolbar.items = toolBarItems
        self.toolbar.setItems(toolBarItems, animated: true)

    }//End viewDidLoad


    func toHome() {
        let homeVC = HomeViewController(nibName: "HomeViewController", bundle: nil)
        self.pushViewController(homeVC, animated: true)
    }

    func toGame() {
        let gameVC = GameViewController(nibName: "GameViewController", bundle: nil)
        self.pushViewController(gameVC, animated: true)
    }

}

3 个答案:

答案 0 :(得分:1)

您是否为依赖控制器创建了第二个.swift文件?您应该将此代码移动到从属控制器文件

self.navigationController?.toolbarHidden = false

    let button1 = UIBarButtonItem(title: "home", style: .Plain, target: self, action: #selector(SecondViewController.home))

    let myToolBar = [button1]

    self.setToolbarItems(myToolBar, animated: true)

答案 1 :(得分:0)

我不确定,但我认为你的按钮大小为0.所以也许你应该添加一些约束或查看帧大小。您可以尝试使用view hierarchy debugger进行调试。

答案 2 :(得分:0)

也许你只需要替换这个self.navigationController?.toolbarHidden = false 使用此toolbarHidden = false

我对你的代码感到困惑。您向我们展示的类是一个导航控制器,其中所有其他ViewController都依赖于它,或者它本身是一个依赖的ViewController,在这种情况下似乎是一个导航控制器?或者是错误的导航控制器? (不太可能)

我为什么这么问?有时你指的是带有self.navigationController?.toolbarHidden = false的父导航控制器,而不是这个导航控制器本身。然后在其余代码中,您将引用此控制器本身。

希望这会导致正确的思考。