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

我有一个NavController已连接ContainerView。在containerView里面有一个segmentControl。 containerView有两个导航控制器连接到它,每个导致他们自己的子控制器:TabZeroVCTabOneVC。最初显示的第一个视图是TabZeroVCselectedSegmentIndex = 0)。里面有一个按钮,导致TabChangeVC里面有一个buttonToSwitchTab。按下那个按钮我想要popTabOneVCSwift iOS - 如何使用NavigationController弹出到不同的SegmentControl索引

我用我的导航控制器使开关,但上线tabOneVC.segmentedControl.selectedSegmentIndex = 1下方尝试这种代码,我得到一个崩溃:意外发现零而展开的可选值

我上放一个破发点它和containerVC被初始化,但它的3个属性segmentedControl,tabZeroVCtabOneVC都是零。由于segmentedControl这就是发生崩溃的地方。

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! 

... 
} 

TabOneVCselectedSegmentIndex = 1

我的问题是我怎么弹出来TabOneVCTabChangeVC,更重要的原因是containerVC的segmentedControl来了为零?

+0

据我你首先需要在流行'的所有元素NavCntrl0'然后推入'navCntrl1'。 –

回答

0

我不知道为什么segmentedControl快到了作为但我能poptabOneVC使用NSNotificationCenter。我创建)名为tabSwitch(一FUNC与我想表现的段,然后我增加了一个listenerContainerViewControllerviewDidLoad内:

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

的TabChangeVC我在里面加了notifier来触发它,navigationController?.popToRootViewControllerAnimated(true)到我们回到root VC:

class TabChangeVC: UIViewController{ 

@IBAction func buttonToSwitchTab(sender: UIButton){ 

    NSNotificationCenter.defaultCenter().postNotificationName("tabSwitch", object: nil) 
    self.navigationController?.popToRootViewControllerAnimated(true) 
    } 
} 
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 
+0

感谢帮助家人,但它没有奏效。我在这里得到相同的崩溃结果:tabOneVC.segmentedControl.selectedSegmentIndex = 1它出现为零。我在上面放了一个断点,TabZeroVC和TabOneVC都是零。顺便说一句,你需要把“as!TabOneController”放在末尾:let tabOneVC = mainStoryboard.instantiateViewControllerWithIdentifier(“TabOneNavigationController”)as! TabOneController或它不会让我访问下一行的.segmentedControl –

相关问题