2010-12-26 13 views
3

それぞれにUIToolbarを含むUIPickerViewを含む複数のビューを設定しました。各UIToolerViewにはUIBoolButtonItemがあります。これはすべてIBで設定されています。私はコード内のUIPickerViewsへのポインタを持っています。 UIPickerViewsのどちらを扱っているかによって、UIBarButtonItemsを関数の一部として参照する必要があります。私は(id)送信者をこの関数の引数として持っています。送信者は常にUIBarButtonItemsの1つです。この特定のUIBarButtonItemがどのUIPickerViewに属しているかを調べようとしています。私は、UIPickerView階層を起動してUIBarButtonItemを処理しなければならないと仮定します。 UIBarButtonItemオブジェクトへの明示的な参照はIBで設定されているため、単純な比較はできないため、これは正しいアプローチだと思います。さらに、サブビューには親ビューへのポインタがないため、階層をバックアップするための作業ができません。正しい?私がこの点について考えているのであれば、各UIPickerViewのビュー階層をたどり、UIToolBarを見つけてからUIBarButtonItemを探しますか? UIToolBarレベルとUIBarButtonItemレベルの両方で正確に何をチェックするのですか?オブジェクトがそれぞれUIToolBar型かUIBarButtonItem型かどうかを調べるif文を実行しますか? if文でオブジェクトの型を見つけるにはどうすればよいですか?Interface Builderでセットアップされたオブジェクトをプログラムで参照する

私はUIBarButtonItemへの明示的な参照を持っていたので、(id)送信者を最初に比較することができるように、この全体をコードで設定する必要がありますか?

答えて

2

あなたは2つのことを行う必要があることを理解する:

1つ。コードでは@interfaceIBOutlet <object-type> <var-name>を追加します。たとえば、「一時停止」のためのUIButtonがある場合は、

@interface blabla { 
    ... 
    IBOutlet UIButton btnPause; 
} 

2つがあります。 Interface Builderで、Ctrlキーを押しながら「File's Owner」からボタンまでドラッグし、「btnPause」を選択します。

(id)senderが届く場所では、たとえば

if (sender == btnPause) { ... } 
+0

ありがとう、Kalle。非常に役立ちます。 – StoneBreaker

+0

@Kalle:(btnPause <->のファイルの所有者をバインドできますか?)「プログラムで」実行できますか?どうやって?あなたは答えを編集することができます。ありがとう。 – cibercitizen1

+0

いいえ、あなたはできません。ボタンを参照することなく、あなたは何もしません。ハックがあるかもしれません。なぜあなたがしたいと思うのか分かりませんが、あなたがIBで作ったのであれば、リンクしてもいいですよね? – Kalle

関連する問題