//Index=0 //contains buttonToSwitchTab to pop to TabOneVC
TabZeroNavCntrlr ----TabZeroVC --- TabChangeVC
//segmntCntrl /
NavCntlr--ContainerView---
\ //Index=1
TabOneNavCntrlr ---- TabOneVC
我有一个与NavController
相关联的ContainerView
。在containerView中有一个segmentControl
。 containerView还有两个连接到它的导航控制器,每个控制器都通向他们自己的子控制器:TabZeroVC
和TabOneVC
。最初显示的第一个视图是TabZeroVC
( selectedSegmentIndex = 0 )。里面有一个通向TabChangeVC
的按钮,里面有一个buttonToSwitchTab
。按下该按钮,我想pop
到TabOneVC
。
我尝试使用我的导航控制器进行下面的代码来进行切换但是在行tabOneVC.segmentedControl.selectedSegmentIndex = 1
上我遇到了崩溃:意外地发现了nil,同时解开了一个Optional值< / em>的
我在它上面加了一个断点, containerVC 被初始化了,但它的3个属性segmentedControl
,tabZeroVC
和tabOneVC
都是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的形式出现?
答案 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 ,但我可以通过使用pop
到tabOneVC
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