2009-04-05 16 views
3

私のサブクラスのUIViewはタッチイベントを処理し、タッチが開始されるとトラッキングが発生すると内部値を更新します。どのようにUIKitでカスタムコントロールを作成しますか?

ビューコントローラがこのカスタムビューを画面に読み込みます。カスタムコントロールの値の変更をリッスンするようにView Controllerを設定する最も良い方法は何ですか?

+0

申し訳ありませんが、私はその答えを書いた直後に眠りにつきました。私は今私の答えを更新しました。 –

答えて

8

次のことが可能です。

  1. はあなたのコントローラ内のデリゲートメソッドを実装し、あなたのビューからそれらを呼び出す、または
  2. サブクラスUIControl代わりと値が変更されたときに、あなたのコントローラ

UIControlEvent Sを送信(または、ユーザーがあなたのコントロールとやり取りするとき)。

ビューを使用してユーザーから何らかの入力を取得する場合は、サブクラス化UIControlを使用する方が良い方法です。 iPhoneリファレンスライブラリから

UIControlは、コントロールの基本クラスです:ボタンやスライダーなどのオブジェクトは、アプリケーションにユーザの意図を伝えるために使用されます。

のでUIViewUIControl間の最も重要な違いは、ユーザーの意図が搬送されているかどうかです。 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を見てみたいことがあります。

+0

selam、これは私の質問と同じように見えますが、私の最後の2つの質問を見ることができますか、まだまだ良い回答はありませんでした。 http://stackoverflow.com/questions/6597997/iphone-application-object-oriented-design-ideas – Spring

関連する問題