Swift iOS - 如何使用NavigationController弹出到不同的SegmentControl索引

时间:2017-03-01 04:58:19

标签: ios uiviewcontroller uinavigationcontroller swift2 uisegmentedcontrol

                                                //Index=0     //contains buttonToSwitchTab to pop to TabOneVC
                           TabZeroNavCntrlr ----TabZeroVC --- TabChangeVC
          //segmntCntrl   /
NavCntlr--ContainerView---
                          \                     //Index=1
                           TabOneNavCntrlr ---- TabOneVC

我有一个与NavController相关联的ContainerView。在containerView中有一个segmentControl。 containerView还有两个连接到它的导航控制器,每个控制器都通向他们自己的子控制器:TabZeroVCTabOneVC。最初显示的第一个视图是TabZeroVC selectedSegmentIndex = 0 )。里面有一个通向TabChangeVC的按钮,里面有一个buttonToSwitchTab。按下该按钮,我想popTabOneVC

我尝试使用我的导航控制器进行下面的代码来进行切换但是在行tabOneVC.segmentedControl.selectedSegmentIndex = 1上我遇到了崩溃:意外地发现了nil,同时解开了一个Optional值< / em>的

我在它上面加了一个断点, containerVC 被初始化了,但它的3个属性segmentedControltabZeroVCtabOneVC都是nil 。由于segmentedControl nil ,这就是发生崩溃的地方。

class TabChangeVC: UIViewController{

@IBAction func buttonToSwitchTab(sender: UIButton){

    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let containerVC = mainStoryboard.instantiateViewControllerWithIdentifier("ContainerViewController") as! ContainerViewController
    containerVC.segmentedControl.selectedSegmentIndex = 1 //crash happens here
    self.navigationController?.popToViewController(containerVC, animated: true)
  }
}

ContainerView:

class ContainerViewController:  UIViewController{
     @IBOutlet weak var segmentedControl: UISegmentedControl!
     @IBOutlet weak var tabZeroVC: UIView!
     @IBOutlet weak var tabOneVC: UIView!

...
}

TabOneVC selectedSegmentIndex = 1

我的问题是如何从TabOneVC弹出TabChangeVC,更重要的是为什么containerVC的segmentedControl会以nil的形式出现?

2 个答案:

答案 0 :(得分:0)

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil
let tabOneVC = mainStoryboard.instantiateViewControllerWithIdentifier("TabOneNavigationController") //TabOneNavCntrlr identifire      
tabOneVC.segmentedControl.selectedSegmentIndex = 1 
appDelegate.window!.rootViewController = tabOneVC

答案 1 :(得分:0)

我不知道为什么 segmentedControl 即将出现 nil ,但我可以通过使用poptabOneVC NSNotificationCenter。我创建了一个名为 tabSwitch()的func,其中包含我想要显示的片段,然后我在listener的{​​{1}}内添加了viewDidLoad

ContainerViewController

在TabChangeVC内部,我添加了class ContainerViewController: UIViewController{ @IBOutlet weak var segmentedControl: UISegmentedControl! @IBOutlet weak var tabZeroVC: UIView! @IBOutlet weak var tabOneVC: UIView! override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(tabSwitch), name: "tabSwitch", object: nil) } func tabSwitch(){ self.segmentedControl.selectedSegmentIndex = 1 self.tabZeroVC.hidden = true self.tabOneVC.hidden = false } } 来触发它,notifier返回到navigationController?.popToRootViewControllerAnimated(true) vc:

root