0

Я не уверен, почему этот фрагмент кода, который должен вставлять два элемента кнопки на панели инструментов навигационного контроллера, не будет работать. Сама панель инструментов отображается, когда я запускаю свой код, но не элементы панели. Что я здесь делаю неправильно? Спасибо за внимание.UIBarButtonItems, созданный программно с Swift, не отображается

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

} 

ответ

0

Я не уверен, но я думаю, что ваши кнопки имеют размер 0. Поэтому, возможно, вам следует добавить некоторые ограничения или размер кадра. Вы можете попробовать отладки с помощью view hierarchy debugger.

0

Может быть, вы просто должны заменить этот self.navigationController?.toolbarHidden = false С этим toolbarHidden = false

Я запутался кода. Является ли класс, который вы нам показываете, один контроллер навигации, на который зависит все остальные ViewController, или он сам является зависимым ViewController, который в этом случае является навигационным контроллером? Или это навигационный контроллер по ошибке? (не очень)

Почему я спрашиваю? В свое время вы имеете в виду родительский контроллер навигации с self.navigationController?.toolbarHidden = false, который не является этим навигационным контроллером. Затем в остальной части кода вы ссылаетесь на этот контроллер.

Надеюсь, это приведет к правильному мышлению.

+0

Класс - это действительно один контроллер навигации, от которого зависят все остальные контроллеры. Из того, что я понимаю о контроллерах навигации, у них есть встроенная панель навигации и панель инструментов, в которые могут быть встроены элементы панели. То, что я пытаюсь сделать, - это вставить штриховые кнопки на панель инструментов, которая принадлежит этому навигационному контроллеру, что должно в конечном счете быть видимым для всех контроллеров представления, которые являются дочерними элементами навигационного контроллера. –

+0

Теперь я понимаю, почему это должно быть просто toolbarHidden = false Я исправил эту строку, но все же теперь меняю ее. Панель инструментов остается видимой, но кнопки на панели не отображаются –

+0

Обычно я предлагаю раскадровку делать все это. В этих случаях он автоматически определяет rootVieController. У тебя есть один? Определено в раскадровке или программно? Скорее всего, что NavigationController представляет и компоновал все только с этим корневым контроллером. – jboi

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) 
+0

и да. Вы можете сделать с toolbar.hidden = false, как было сказано ранее. Спасибо! Я также исправлю свой код – nadi9

+0

не уверен, что вы подразумеваете под «зависимым контроллером» –

+0

Я имел в виду. У меня есть файл для каждого контроллера в моем проекте. Один .swift для контроллера навигации и другой для его ответчика (например, контроллер табличного представления или контроллер просмотра). – nadi9

Смежные вопросы