2016-09-03 2 views
1

Я собираюсь использовать аналогичные свойства на всех моих контроллерах навигации в разных контроллерах представления, за исключением некоторых элементов навигации и, очевидно, заголовков.swift - расширение UINavigationController не работает

Я сделал планирование расширения, чтобы иметь возможность вызвать его и установить мои настройки по умолчанию; однако он ничего не делает. Код действительно работает, когда я просто помещаю его в фактический класс, но не тогда, когда я вызываю SetDefaults.

Расширение:

extension UINavigationController { 
    func setDefaults(titleText: String){ 
     let appDel = UIApplication.sharedApplication().delegate as! AppDelegate 

     //Set title label 
     let label = UILabel() 
     label.font = UIFont(name: appDel.regularDefaultFont, size: 16) 
     label.text = titleText 
     label.kern(1.0) 
     label.sizeToFit() 
     self.navigationItem.titleView = label 

     //Set white background tint color 
     self.navigationBar.barTintColor = UIColor.whiteColor() 

     //Set navigation bar bottom line 
     let bottomBorderRect = CGRect(x: 0, y: UIScreen.mainScreen().bounds.height, width: UIScreen.mainScreen().bounds.width, height: 1) 
     let bottomBorderView = UIView(frame: bottomBorderRect) 
     bottomBorderView.backgroundColor = UIColor(r: 250, g: 250, b: 250) 
     navigationBar.addSubview(bottomBorderView) 
    } 
} 

вызовы в SetDefaults из класса с navigationcontroller:

self.navigationController.SetDefaults("Login") 
+0

Вы можете установить контрольную точку в расширении и посмотреть, является ли это достигнуто? – kabiroberai

+0

убедитесь, что вы на самом деле вызываете 'setDefaults' на правый навигационный контроллер. Если вы используете UISplitViewController, свойство собственного навигационного контроллера контроллера просмотра может быть не на экране – Luke

+0

kabiroberai, я попробовал это, и он туда попал. @Luke Я вызываю setDefaults в контроллере представления, который я только что показал. Это верно? Ознакомьтесь с моим комментарием к приведенному ниже ответу, чтобы увидеть код, который я использую, чтобы показать контроллер вида. – Walker

ответ

0

В раскадровке вы должны выбрать Segue тип для show при подключении одного View Controller к другому или просто выберите свой segue> в инспекторе атрибутов> storybook segue> kind> show (например) push. , как показано в этом

enter image description here

изображение Это будет решить проблему окончательно :)

+0

Faiz, я показываю контроллер представления через код. 'let loginController = vcLogin() self.navigationController? .showViewController (loginController, sender: nil)' Также я вызываю настройки по умолчанию в контроллере vcLogin .. это правильно? – Walker

+0

@Walker, пожалуйста, проверьте мой новый ответ и сделайте, дайте мне знать, если это работает или отличное решение. –

0

ваш код должен выглядеть следующим образом.

let vcLogin = loginViewController(
      nibName: "loginViewController", 
      bundle: nil) 
     navigationController?.pushViewController(vcLogin, 
      animated: true) 

Надеемся, что это работает, как поток воды ...

+0

@Walker, вы следовали моему коду и теперь он работает на вашей стороне? Пожалуйста, уточните меня о вашей обратной связи –

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