2016-02-22 4 views
0

У меня есть класс, как это,PushViewController из другого UIViewController - Swift

import UIkit 

class One { 

    let btn = UIButton() 

    override func viewDidLoad(){ 
     super.viewDidLoad() 

     btn.frame = CGRectMake(10, 20, 30, 30) 
     btn.setTitle("Go", forState: UIControlState.Normal) 
     btn.addTarget(self, action: "goToClassTwo", forControlEvents: UIControlEvents.TouchUpInside) 
     self.view.addSubview(btn) 
    } 

    func goToClassTwo(){ 
     if(AppGlobals().getIsFromDiffView()){ 
      let difView = UINavigationController(rootViewController: DiffView()) 
      difView.pushViewController(Two(), animated: true) 
     }else{ 
      self.navigationController?.pushViewController(Two(), animated: true) 
     } 
    } 
} 

Класс сеттер/добытчика, как это,

class AppGlobals: NSObject { 

    var isFromDiffView = false 

    func setIsFromDiffView(val: Bool){ 
     isFromDiffView = val 
    } 

    func getIsFromDiffView() -> Bool { 
     return isFromDiffView 
    } 

} 

И у меня есть еще один класс, как это,

class DiffView { 

    let btn = UIButton() 

    override func viewDidLoad(){ 
     super.viewDidLoad() 

     btn.frame = CGRectMake(10, 20, 30, 30) 
     btn.setTitle("Push", forState: UIControlState.Normal) 
     btn.addTarget(self, action: "btnAction", forControlEvents: UIControlEvents.TouchUpInside) 
     self.view.addSubview(btn) 
    } 

    func btnAction(){ 
     AppGlobals().setIsFromDiffView(true) 
     One().goToClassTwo() 
    } 
} 

У меня здесь проблема. Когда нажата кнопка «Go» в классе «One», отображается контроллер «Two». Но когда я нажимаю кнопку «Push» в классе «DiffView», вызывается, контроллер «Два» не отображается.

Я проверил установки контрольных точек. Элемент управления приходит к функции goToClassTwo в классе «Один» и выполняется путь if. Но контроллер «Два» не отображается. difView.pushViewController. Но это не толкает к следующему виду.

ПРИМЕЧАНИЕ: Я не использую раскадровки

Любая помощь будет оценен по достоинству!

+0

Проверьте, является ли второй раз AppGlobals(). GetIsFromDiffView() является ложным. – UlyssesR

+0

Это правда. Элемент управления попадает в путь 'if'. Но ничего не происходит. –

+0

проблема в том, что вы создаете UINavigationController и нажимаете на него два(). Но вы никогда не представляете созданный контроллер навигации в окне вашего приложения. Таким образом, представление определенно не будет отображаться. – Surely

ответ

0

Это обновленный код.

Код для класса 'One':

import UIKit 

class One { 

    let btn = UIButton() 

    override func viewDidLoad(){ 
     super.viewDidLoad() 

     btn.frame = CGRectMake(10, 20, 30, 30) 
     btn.setTitle("Go", forState: UIControlState.Normal) 
     btn.addTarget(self, action: "goToClassTwo", forControlEvents: UIControlEvents.TouchUpInside) 
     self.view.addSubview(btn) 
    } 

    func goToClassTwo(){ 
     if(AppGlobals().getIsFromDiffView()){ 
      //Using the navigation controller of DiffView 
      AppGlobals().getController().pushViewController(Two(), animated: true) 
     }else{ 
      self.navigationController?.pushViewController(Two(), animated: true) 
     } 
    } 
} 

сеттер/добытчика класс:

class AppGlobals: NSObject { 

    var isFromDiffView = false 
    var cntrlr: UINavigationController! 

    func setIsFromDiffView(val: Bool){ 
     isFromDiffView = val 
    } 

    func getIsFromDiffView() -> Bool { 
     return isFromDiffView 
    } 

    //Setting and getting DiffView Navigation controller 
    func setController(cntrl: UINavigationController){ 
     cntrlr = cntrl 
    } 

    func getController() -> UINavigationController { 
     return cntrlr 
    } 

} 

DiffView класс:

class DiffView { 

    let btn = UIButton() 

    override func viewDidLoad(){ 
     super.viewDidLoad() 

     btn.frame = CGRectMake(10, 20, 30, 30) 
     btn.setTitle("Push", forState: UIControlState.Normal) 
     btn.addTarget(self, action: "btnAction", forControlEvents: UIControlEvents.TouchUpInside) 
     self.view.addSubview(btn) 
    } 

    func btnAction(){ 
     AppGlobals().setIsFromDiffView(true) 
     //Setting the navigation controller 
     AppGlobals().setController(self.navigationController!) 
     One().goToClassTwo() 
    } 
} 

С помощью этого обновленного кода, класс представления 'два' отображается контроллер. Спасибо @zp_x за вашу помощь.

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