2015-05-23 49 views
1

我是IOS編程的新手。在我的應用程序中,我有一個容器視圖,該視圖連接到三頁的頁面視圖控制器。它運作良好。當我在主視圖控制器中按下一個按鈕時,我想更改容器視圖中的按鈕標籤。所以,我必須將主視圖中的變量連接到頁面視圖控制器中的變量。我寫如下,但當我點擊按鈕(SIGABRT信號)時崩潰。通過單擊主視圖中的按鈕更改容器視圖中的按鈕標籤

@IBAction func pressShift(sender: AnyObject) { 
    if (self.shift != 3) { 
     self.shift++ 
    } 
    else { 
     self.shift = 1 
    } 
    performSegueWithIdentifier("container", sender: sender) 
} 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    var scene = segue.destinationViewController as! FeaturesViewController 
    scene.shiftNumber = self.shift 
} 

我做了一個簡單的示例項目。主視圖中的容器視圖。容器視圖(不是頁面視圖控制器)中有一個標籤,主視圖中有一個按鈕。我寫了相同的代碼,但同樣的錯誤發生。 這裏是我的故事板的圖像...

Storyboard Image

示例項目:http://www.filedropper.com/exampletosegue

+1

有幾件事,你應該檢查prepareForSeque中的segueIdentifier if(segue.identifier ==「container」){...},我想你應該寫「as?」而不是「as!」 (我不知道這是什麼導致你的崩潰,我也是新的迅速) – TheSD

+0

segueIdentifier是正確的。當我調試時,我按下按鈕時會調用prepareForSegue方法。該方法執行後,它崩潰。另外,檢查「as?」。不工作.. – D3sT

+0

也許檢查self.shift!=無 – TheSD

回答

0

我通過除去已經在第一次啓動時創建子視圖解決了這個問題..

@IBAction func insertButton(sender: AnyObject) { 

    if (shiftNo != 3) { 
     shiftNo++ 
    } 
    else { 
     shiftNo = 1 
    } 

    var childView = self.childViewControllers[0] as! UIViewController 
    childView.willMoveToParentViewController(nil) 
    childView.view.removeFromSuperview() 
    childView.removeFromParentViewController() 

    performSegueWithIdentifier("container", sender: self) 
} 
相關問題