IBAction の設定で少しはまったこと

iOS 開発で storyboard や xib を使ってレイアウトを組むことは一般的です(まぁ複雑なレイアウトを組むときは除いて)。自分も基本的にはこれらを使ってレイアウトを組んでいます。仕事で iOS 開発をしていたとき、カスタムセルを作る必要があったので、いつも通りに組んで IBAction の処理を書いて〜 動作確認してみたら、IBAction の処理に入ってこない、イベントが拾えていない。なんでだということで少しばかり時間を割いてしまいました。結局解決はしたのですが、「あっ、そんなのあったんだ」という気付きがあったのでまとめておきます。

カスタムセルを作って、そこにボタンを配置してクリックイベントを拾うということはよくある処理だと思います。以下の図のように Connection を Action にしで Event を設定します。

f:id:tunanosuke:20140621011019p:plain

設定をし Connect すると Button に紐付くメソッドができるのであとはそのメソッドに処理を書いていけば、設定した Event が行われたときにメソッドが呼ばれ処理が実行されます。ただ今回まったく処理が実行されませんでした。理由は User Interaction Enabled にチェックが入っていなかったことが原因でした。

  f:id:tunanosuke:20140621011626p:plain

デフォルトではチェックが入っているためこれまで気にしていませんでした。ここのチャックが外れているとイベントを拾おうとしてもまったく拾えなくなります。今回でいうと、カスタムセル自体がイベントは受け付けませんよーという状態になっていました。チェックを入れることで無事解決しました。

思わぬところで時間を割いてしまいましたが、新たな気付きもできました。iOS8 対応とか swift 移行とかでこれから秋くらいにかけては iOS に触れる機会が増えそうなので、注意しなければと思いました。