設定 Pop Up Button / Pull Down Button 下 command 的 selector
開發 iOS App 時,我們可以在 Interface Builder 加入方便顯示選單的 Pop Up Button & Pull Down Button。不過事情沒有想像中簡單,想讓它們發揮作用還得做些調整。以下我們一步步說明遇到的問題,然後再說明解法。
Interface Builder 的 Pop Up Button & Pull Down Button 問題
我們先在 storyboard 的畫面上加入 Pop Up Button。
在 Menu 下加入六個 Command,分別代表中華職棒的六個球隊。
將最棒的統一獅設為預設選項,State 設為 On。
storyboard 的畫面看起來一切正常,不過執行 App 點選 button 選球隊時卻馬上閃退,顯示紅色錯誤 Menu does not have a valid element for default selection
。
閃退的原因是因為 Menu 下的 command 沒有設定點選時觸發的 selector(function)。切換到 command 的 Connections inspector 頁面可看到 selector 處於沒設定的狀態。
我們只要能設定 command 觸發的 IBAction function 即可解決問題。但是問題來了,如下圖所示,從 command 拉線到 controller 時發現沒辦法連結 Action,只能連 Outlet & Outlet Collection。
Pull Down Button 也有類似的問題,執行 App 點選 button 時雖然不會閃退,但是它也不會出現選單,成了沒用的 button,問題同樣是因為 command 沒有設定點選時觸發的 selector。
設定 command 點選時觸發的 selector
只要能設定 command 觸發的 IBAction function 即可解決問題,但是要怎麼設定呢 ?
設定的方法跟一般連結 IBAction 的方法不太一樣,我們必須先在 controller 手動輸入 IBAction function,然後在 storyboard 從 command 連線到 First Responder 時選擇定義的 IBAction function。
以下我們以剛剛中職六個球隊的 Pop Up Button 為例說明。
- 在 view controller 定義待會要連結的 IBAction function。
Pop Up Button 已幫我們實現點選改標題的功能,因此 { } 裡可以不做任何事。
@IBAction func selectTeam() {
}
- 將 Menu 下的 command 連到 First Responder。
- 放開觸控板,選擇剛剛定義的 IBAction function selectTeam。
重覆以上步驟,將六個球隊的 command 都連到 First Responder 的 selectTeam。
現在點選 button 選球隊終於正常了,我們可以自由地切換球隊,button 的標題也會更新成選擇的球隊。若是 Pull Down Button 也能用類似的方法解決剛剛的問題。