来自另一个 UIViewController 的 PushViewController - Swift

PushViewController from another UIViewController - Swift

我有一个这样的class,

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

一个setter/getterclass这样,

class AppGlobals: NSObject {

     var isFromDiffView = false

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

     func getIsFromDiffView() -> Bool {
         return isFromDiffView
     }

}

我还有一个这样的class,

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

我遇到了一个问题。当点击 class 'One' 中的 'Go' 按钮时,将显示 'Two' 视图控制器。但是当我点击 class 中的 'Push' 按钮时 'DiffView' 被点击,'Two' 视图控制器没有显示。

我检查了设置断点。控制确实来到了class'One'中的goToClassTwo函数,正在执行if路径。但是未显示 'Two' 视图控制器。 difView.pushViewController 被调用。但它并没有推送到下一个视图。

注意:我没有使用故事板

如有任何帮助,我们将不胜感激!

这是更新后的代码。

class的代码'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)
        }
    }
}

setter/getter class:

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
     }

}

差异视图 class:

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

使用此更新的代码,class 'Two' 视图控制器正在显示。 谢谢@zp_x的帮助。