0

ATM機で金額を入力するのと同じように、特定の価格の金額を簡単に入力できるクラスを作成しました。ユーザーは小数点以下を入力しません。

これは(AmountPicker)と呼ばれるジェネリッククラスであるため、他の多くのクラス間で使用できます。presentModalViewControllerメソッドを呼び出して使用していますが、このクラスはnibファイルを使用しています。xibの内部には、非表示のテキストフィールドとラベル、およびナビゲーションバーの完了ボタンがあります。完了ボタンは、doneButtonPressedという名前のメソッドに接続されたIBActionです。

このメソッドを別のクラスに委任して、メソッド内のロジックが、amountPickerクラス内ですでに定義されているロジックと異なる可能性があるかどうかを知りたいです。

その理由は、amountPickerクラスを2か所で使用して購入を入力するためです。1つはラベルテキストを取得し、appDelegate内の変数に値を割り当てます。これは、1つのクラスで使用しただけで問題ありませんでしたが、現在は購入のdetailTableViewControllerとこのビューは、データが間違って入力された場合にデータを変更する方法も提供する必要があります。

したがって、カスタムヘッダーを使用している詳細ビューでは、カスタムヘッダーには、購入名のtextField、AmountPickerをアクティブ化するボタン、および金額のラベルがあります。金額ボタンを押すと、AmountPickerクラスがポップします。 upで、ユーザーが金額を入力して完了ボタンを押します。ここで、appDelegateで変数を使用する代わりに、doneButtonのロジックを変更する必要があります。

DetailTableViewControllerがamountPickerクラスのデリゲートとして機能し、doneButtonPressedメソッドをオーバーライドして、amountLabelを新しい量で更新できるようになると考えていました。

これは可能ですか、そうでない場合、正しい方法は何ですか?

4

1 に答える 1

2

あなたの考えは、委任が通常どのように使用されるかと一緒に正しいです。私がすることは、Objective-Cプロトコル、おそらくAmountPickerDelegateを作成することです。次に、AmountPickerのインターフェイスに、次のようになります。

@interface AmountPicker : NSObject {
    NSString *someValue;
    ...
    id <AmountPickerDelegate> delegate;
}

@property (assign) id <AmountPickerDelegate> delegate;

@end

次に、デリゲートクラスで、次のようにします。

@interface DetailTableViewController : UITableViewController <AmountPickerDelegate>

最後に、元のAmountPickerクラスでは、次のように呼び出すことができます。

[delegate amountPickerDidPressDoneButton];

これはデリゲートで実行されます。

于 2010-02-16T18:56:49.707 に答える