InterfaceBuilderでIBActionが認識されない場合の対処
理由はわからない。しかし、カスタムのViewControllerのヘッダーで定義したはずのIBActionがInterfaceBuilder(以下IB)で認識されなくなる場合がある。ただ、ヘッダーで定義したIBOutletは認識される。
IBの「File」>「Reload All Class Files」を使っても状況は変わらない。
放っておいてそのままコンパイルすると「・・・no longer defined・・・」という警告が出る。困ったもんだ。見たところ特に動作に影響は無いようだが、警告が出ている以上どこでどうなるかわからない。
そこで、この警告を出さないようにするにはどうすればよいか?
・カスタムViewControllerのXIBをIBで開く
・ライブブラリを開く
・「Classes」タブへ
・カスタムViewCOntrollerのクラスを探して選択
・下に出てくる詳細で「Actions」タブへ
・「+」ボタンでアクションに設定したいメソッド名を入力 例「onTouchUpInsideBtn:」
・インスペクタを開く
・「File's Owner」を選択
・インスペクタの「connections」タブへ
・「Recieved Actions」で「!」のついているアクションを切り離す
・さっきIBで追加したアクションが「Recieved Actions」に出てくるので適当にアウトレットと接続する
・保存する
IBで追加したアクションはデフォルトではidを引数にもつように設定されるので、もしヘッダーの方で定義してあるメソッドがidを引数に持つようになっていない場合は持たせる。
例:- (IBAction)onTouchUpInsideBtn:(id)sender;
前にも一度このような状況になったが、その時は大したプログラムではなかったのでイチから作り直した。しかし、今回はそうはいかなかった。一応これで対処方法は判ったが、面倒だ。一体どこでどうしたらこうなったのか・・・?
IBの「File」>「Reload All Class Files」を使っても状況は変わらない。
放っておいてそのままコンパイルすると「・・・no longer defined・・・」という警告が出る。困ったもんだ。見たところ特に動作に影響は無いようだが、警告が出ている以上どこでどうなるかわからない。
そこで、この警告を出さないようにするにはどうすればよいか?
・カスタムViewControllerのXIBをIBで開く
・ライブブラリを開く
・「Classes」タブへ
・カスタムViewCOntrollerのクラスを探して選択
・下に出てくる詳細で「Actions」タブへ
・「+」ボタンでアクションに設定したいメソッド名を入力 例「onTouchUpInsideBtn:」
・インスペクタを開く
・「File's Owner」を選択
・インスペクタの「connections」タブへ
・「Recieved Actions」で「!」のついているアクションを切り離す
・さっきIBで追加したアクションが「Recieved Actions」に出てくるので適当にアウトレットと接続する
・保存する
IBで追加したアクションはデフォルトではidを引数にもつように設定されるので、もしヘッダーの方で定義してあるメソッドがidを引数に持つようになっていない場合は持たせる。
例:- (IBAction)onTouchUpInsideBtn:(id)sender;
前にも一度このような状況になったが、その時は大したプログラムではなかったのでイチから作り直した。しかし、今回はそうはいかなかった。一応これで対処方法は判ったが、面倒だ。一体どこでどうしたらこうなったのか・・・?
本当に。いつ何がきっかけで出るようになったか、ねー。対処法アップありがとうございます。
返信削除