1

UITextfield を拡張するクラスがあります。また、同じクラスを独自のデリゲートに設定しているため、テキスト フィールドを選択すると背景色を変更できます。テキスト フィールドを選択して数文字入力すると、アプリがロックしてクラッシュします。

ここに私の.mファイルがどのように見えるかがあります

@implementation MyTextField

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        self.delegate = self;

    }
    return self;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"run did begine editing");
    [self setBackgroundColor:[UIColor colorWithRed:0.204 green:0.239 blue:0.275 alpha:0.25]];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
    NSLog(@"run did end editing");
    [self setBackgroundColor:[UIColor clearColor]];
}

ここに.hがあります

@interface MyTextField : UITextField <UITextFieldDelegate>

@end
4

3 に答える 3

1

UIViewControllerプロトコルが定義されている別のクラスによってイベントが委任されるため、委任は常に別のものになります。

同じクラスのすべての変数とメソッドにアクセスできる場合は、同じクラスのデリゲートメソッドは必要ありません。

単に呼び出すことができます[self someFunction]

UITextFieldを継承しているため、UITextFieldデリゲートのプロパティを定義する必要はありません。別のviewControllerを設定するだけです。

また、プロトコルを定義するクラスには宣言があるだけで、プロトコルに準拠していません。

デリゲートは、プロトコルに準拠するクラスになります。

于 2013-03-14T11:17:55.267 に答える
1

UITextFieldTextDidBeginEditingNotificationor UITextFieldTextDidEndEditingNotification NSNotificationsに登録します。コールバックで、通知オブジェクトが自己であるかどうかを確認します。次に、それに対して何らかのアクションを実行します。

于 2013-03-14T12:14:39.137 に答える
0

この質問の議論は、正しい方向にあなたを導くはずです それをして何が悪いのですか?

于 2013-03-14T11:14:14.307 に答える