2015-09-26 57 views
0

我想要使用不同動作的按鈕。當我第一次點擊按鈕時,只應該更改按鈕名稱。當我再次點擊時,我想顯示第一個ViewController。使用不同動作的UIButton

我的問題是,當我第一次點擊時,它立即顯示第一個ViewController。你能幫我嗎?

感謝

@IBAction func startPressed(sender: UIButton) { 
    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc: ViewController1 = storyboard.instantiateViewControllerWithIdentifier("firstView") as! ViewController1 

    var m: Bool? 
    m = true 
    if (m == true) { 
     startPressed2.setTitle("Try Again", forState: .Normal) 
     m = false 
    } 
    if (m == false) { 
     self.presentViewController(vc, animated: true, completion: nil) 
    } 
} 

回答

1

有與該代碼問題很多

一個問題是,m是一個純粹的局部變量,所以它被創建並設置爲true,新鮮的是,每次調用startPressed

取而代之的是,通過聲明它爲以外的任何方法的來宣傳它爲實例屬性。現在它會一直存在,所以你可以在下一次調用startPressed時再次檢查它。

此外,您的可選在這裏是愚蠢的;不要沒有理由地使用選項。另外,您可以一次定義和初始化所有內容,並且不需要顯式類型。

所以:

var m = true 
@IBAction func startPressed(sender: UIButton) { 

而且,從來沒有一個布爾比較truefalse;布爾的條件。你不需要括號。

最後,如果你想要做的時候m爲真時設置標題,那麼你就需要停止。你可以做到這一點與return,或者通過使用else

if m { 
    startPressed2.setTitle("Try Again", forState: .Normal) 
    m = false 
} else { 
    self.presentViewController(vc, animated: true, completion: nil) 
} 
+0

如果你不理解的範圍和不同類型的變量的一生,看到我的書:http://www.apeth.com/ swiftBook/ch03.html#_variable_scope_and_lifetime – matt

+0

我改變了現在,但我的問題是,當按鈕名稱改變時,它同時顯示視圖控制器。我不希望它在同一時間 – Michael

+0

刷新此頁面以查看我編輯的答案。 – matt

0

,因爲當你玩你的代碼,m = false語句在執行。首先發生的事情,如果,以後,如果第二個條件是正確的if (m == false)所以它起到下面的代碼。

試試這個:

var m:Bool = true 

@IBAction func startPressed(sender: UIButton) { 
    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc: ViewController1 = storyboard.instantiateViewControllerWithIdentifier("firstView") as! ViewController1 

    if (m == true) { 
     startPressed2.setTitle("Try Again", forState: .Normal) 
     m = false 
    }else{ 
     self.presentViewController(vc, animated: true, completion: nil) 
    } 

}