設定 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 也能用類似的方法解決剛剛的問題。

--

--

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

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