我正试图以编程方式将导航控制器添加到我的UIViewController子类中(我没有使用故事板),我想找到初始化它并进行配置的最佳位置。
我尝试了viewDidLoad(视图不是由init初始化的)和一个方便的init(只是为了确保)方法,但是没有成功。
以下是我创建它的方法:

  override init!(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    let nav = UINavigationController(rootViewController: self)
  }

把这个逻辑放在哪种方法最合适?我希望这个逻辑包含在这个VC中。
我可以通过创建导航来实现这一点。用一个来自当前vc的根vc,但这泄露了这个逻辑,我宁愿不这么做。

最佳答案

我不确定这是你要找的,但是你可以在你展示的控制器的方法中加入一些逻辑,以确定它是否应该展示导航控制器;这样做意味着呈现视图控制器不需要知道它呈现的控制器是否嵌入到导航控制器中。呈现控制器将在实例化控制器后调用此方法。显示的控制器可能是这样的,

class NextViewController: UIViewController {

    var wantsNavigationcontroller = true


    func viewControllerWithOrWithoutNavigationController() -> UIViewController {
        if wantsNavigationcontroller {
            let nav =  UINavigationController(rootViewController: self)
            return nav
        }else{
            return self
        }
    }
}

呈现控制器会这样做,
@IBAction func PresentNextcontroller(sender: UIButton) {
        var nextVC = NextViewController()
        self.presentViewController(nextVC.viewControllerWithOrWithoutNavigationController(), animated: true, completion: nil)
    }

关于ios - UIViewController中的UINavigationController以编程方式在类内,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30335748/

10-14 10:55