来自另一个UIViewController的PushViewController - Swift

时间:2016-02-22 11:13:59

标签: ios swift pushviewcontroller

我有一个这样的课程,

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 / getter类,

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

我在这里面临一个问题。当点击“One”类中的“Go”按钮时,将显示“Two”视图控制器。但是当我点击“DiffView”类中的“推送”按钮时,“两个”视图控制器没有显示。

我已检查过设置断点。控件确实来到“One”类中的goToClassTwo函数,并且正在执行if路径。但是没有显示“两个”视图控制器。调用difView.pushViewController。但它没有推动下一个观点。

注意:我没有使用故事板

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是更新的代码。

课程代码'一个':

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
     }

}

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

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