2016-03-02 2 views
2

У меня проблема с моим UINavigationController, когда я пытаюсь нажать другой контроллер.Swift - UINavigation Controller становится nil

AppDelegate

let testViewController:ProximityQuestionsIntroductionViewController = ProximityQuestionsIntroductionViewController(); 
    self.navController = UINavigationController(rootViewController: testViewController); 

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds); 
    self.window!.rootViewController = navController; 
    self.window!.backgroundColor = UIColor.whiteColor(); 
    self.window!.makeKeyAndVisible(); 

    return true 

ProximityQuestionsIntroductionViewController

class ProximityQuestionsIntroductionViewController:UIViewController { 

// Controls 
var proximityIntroductionView:ProximityQuestionsIntroductionView!; 

// Load components when the view is loaded 
override func viewDidLoad() { 
    super.viewDidLoad(); 

    print("nav in viewDidLoad : \(self.navigationController)"); 
    //Hide Nav bar 
    self.navigationController?.navigationBarHidden = true; 
    // Set view 
    self.proximityIntroductionView = ProximityQuestionsIntroductionView(frame: self.view.frame); 
    self.view = self.proximityIntroductionView; 
} 

func start(){ 
    print(self); 
    print("start in controller"); 
    let nextController = ProximityQuestionsProgressViewController(); 
    print("nav in start : \(self.navigationController)"); 
    self.navigationController?.pushViewController(nextController, animated: true); 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

Я называю start от моего ProximityQuestionsIntroductionView при нажатии кнопки. В журнале я вижу «nav в начале: ноль» и контроллер не меняется.

Для получения дополнительной информации:

  • самость действительно ProximityQuestionsIntroductionViewController.

  • навигационная панель действительно скрыта

Так навигационный контроллер нормально в viewDidLoad, но не в другой функции.

Может ли кто-нибудь сказать мне, почему?

Спасибо!

EDIT: AppDelegate

 self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 

    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("ProximityIntroduction"); 
    self.navController = storyboard.instantiateViewControllerWithIdentifier("NavigationController") as! UINavigationController; 
    self.navController?.setViewControllers([initialViewController], animated: false) 
    self.window?.rootViewController = navController; 
    self.window?.makeKeyAndVisible(); 

добавить навигационный контроллер в раскадровку и изменить идентификатор. Но я до сих пор имеют значение nil для UINavigationController в функции start

ответ

0

Проблема возникла с точки зрения.

Делать это:

// Set view 
    self.proximityIntroductionView = ProximityQuestionsIntroductionView(frame: self.view.frame); 
    self.view = self.proximityIntroductionView; 

вызывает проблему. Я точно не знаю, почему, но все UIView в контроллере напрямую решали проблему.

0
self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 

    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("ProximityQuestionsIntroductionViewController") 
    navigationController = UINavigationController.init(rootViewController:initialViewController) 
    navigationController?.setViewControllers([initialViewController], animated: false) 
    self.window?.rootViewController = navigationController 
    self.window?.makeKeyAndVisible() 

Put раскадровку идентификатор для этого ProximityQuestionsIntroductionViewController

+0

Я пытаюсь выполнить весь свой проект без раскадровки, поэтому у меня есть: «NSInvalidArgumentException», причина: «Storyboard ()) не содержит контроллера вида с идентификатором« ProximityQuestionsIntroductionViewController »' –

+0

Так вы используете xib для дизайна? –

+0

Я делаю все это программно. Это проект, который был запущен другими людьми, и я просто не могу прочитать раскадровку, это беспорядок. –

0

Вы должны пометить окно и переменные NavController как опция:

var window : UIWindow? 
var navController : UINavigationController? 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    let testViewController:ProximityQuestionsIntroductionViewController = ProximityQuestionsIntroductionViewController(); 

    self.navController = UINavigationController(rootViewController: testViewController); 

    if let window = window { 

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds); 
    self.window!.rootViewController = navController; 
    self.window!.backgroundColor = UIColor.whiteColor(); 
    self.window!.makeKeyAndVisible(); 
    } 
    return true 
} 

Если вы создали проект из шаблона Xcode: Удалите пару ключ-значение для ключа «Основное имя файла основной раскадровки» из Info.plist. Удалите файл раскадровки Main.storyboard.

+0

Вот как мой код был, когда я впервые опубликовал вопрос. Это не работает, self.navigationController - это начало функции первого контроллера. –

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