同一個 event 連了兩個 IBAction !

透過 IBAction,我們可以設定畫面上元件事件觸發的 function,比方按鈕按下時執行某個 function。但同一個 event 其實可以連結多個 function ,因此有朋友因為這個原因遇到了一些特別的問題。

比方以下例子,我們希望按鈕 Play Again 按下時執行 function playAgain:。但一開始為了在畫面上加入按鈕 Play Again,我們直接 copy paste 按鈕 go,然後再把複製的按鈕改成 Play Again 的圖片。

Copy paste 並沒有錯,工程師有一半的時間都在 copy paste。但須注意 Copy paste 元件時,它會連 action 一起複製(outlet 不會複製)。因此如果原本的按鈕 go 已連結 action goButtonPressed:,經由複製產生的按鈕 Play Again 也會連結 action goButtonPressed。

此時當我們再將它連結 action playAgain:,將產生可怕的靈異現象。按鈕按下時,function goButtonPressed: 和 playAgain: 的程式都會執行,產生我們不想要的結果。

解決問題的方法很簡單,只要記得檢查 event 的連線,將不想要觸發的action 連線刪除即可。另外也請記得,如果在 copy paste 元件時,不想保留原本連結的 action function,請先將它刪除以絕後患。

刪除 goButtonPressed:

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com