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 –