私のサブクラスのUIViewはタッチイベントを処理し、タッチが開始されるとトラッキングが発生すると内部値を更新します。どのようにUIKitでカスタムコントロールを作成しますか?
ビューコントローラがこのカスタムビューを画面に読み込みます。カスタムコントロールの値の変更をリッスンするようにView Controllerを設定する最も良い方法は何ですか?
私のサブクラスのUIViewはタッチイベントを処理し、タッチが開始されるとトラッキングが発生すると内部値を更新します。どのようにUIKitでカスタムコントロールを作成しますか?
ビューコントローラがこのカスタムビューを画面に読み込みます。カスタムコントロールの値の変更をリッスンするようにView Controllerを設定する最も良い方法は何ですか?
次のことが可能です。
UIControl
代わりと値が変更されたときに、あなたのコントローラへUIControlEvent
Sを送信(または、ユーザーがあなたのコントロールとやり取りするとき)。
ビューを使用してユーザーから何らかの入力を取得する場合は、サブクラス化UIControl
を使用する方が良い方法です。 iPhoneリファレンスライブラリから
:
UIControl
は、コントロールの基本クラスです:ボタンやスライダーなどのオブジェクトは、アプリケーションにユーザの意図を伝えるために使用されます。
のでUIView
とUIControl
間の最も重要な違いは、ユーザーの意図が搬送されているかどうかです。 UIView
は情報を表示することを意味し、UIControl
はユーザー入力を収集することを意味します。
UPDATE:
@interface MyView : UIView {
id delegate;
}
@property (assign) id delegate;
@end
:このようにデリゲートを定義し、カスタムビューのインタフェースで
:あなたは、デリゲートパターンで行くことに決めた場合
、ここにあなたのコードは次のようになります方法です
および@synthesize
です。そして
MyView myView = [[MyView alloc] init];
[myView setDelegate:self];
、ユーザは、おそらく値を変更、ビューでこれを行う(touchesBegan
で例えば)ビューと対話するたび:ビューコントローラで
は、デリゲートであるようにコントローラを設定します:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// Possibly change the values
if([delegate respondsToSelector:@selector(valuesChanged)]) {
[delegate valuesChanged];
}
}
また、ココアの基礎ガイドのDelegates and Data Sourcesを見てみたいことがあります。
selam、これは私の質問と同じように見えますが、私の最後の2つの質問を見ることができますか、まだまだ良い回答はありませんでした。 http://stackoverflow.com/questions/6597997/iphone-application-object-oriented-design-ideas – Spring
申し訳ありませんが、私はその答えを書いた直後に眠りにつきました。私は今私の答えを更新しました。 –