1

たとえば、aUITextFieldを独自の delegateにすることはできませんが、独自の通知のオブザーバーとして登録するだけで問題ないでしょうか? 奇妙に見えますが、うまく機能しているようです。考え?

// MyTextField.h

@interface MyTextField : UITextField
@end

// MyTextField.m

@interface MyTextField ()
- (void)myTextFieldDidChange:(NSNotification *)notification;
@end

@implementation MyTextField

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [[NSNotificationCenter defaultCenter]
         addObserver:self
         selector:@selector(myTextFieldDidChange:)
         name:UITextFieldTextDidChangeNotification
         object:self];
    }
}

- (void)myTextFieldDidChange:(NSNotification *)notification {
    // Do custom stuff here.
}

@end
4

1 に答える 1

1

あなたがしていることは問題ないようですが、この特定の例にはより純粋な解決策があります:

// MyTextField.h

@interface MyTextField : UITextField
@end

// MyTextField.m

@interface MyTextField ()
- (void)myTextFieldDidChange:(UITextField *)textField;
@end

@implementation MyTextField

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self addTarget:self action:@selector(myTextFieldDidChange:)
       forControlEvents:UIControlEventEditingChanged];
    }
    return self;
}

- (void)myTextFieldDidChange:(MyTextField *)myTextField {
    // Do custom stuff here.
}

@end

UIControlEvents参照を確認してください。

于 2011-11-04T02:47:05.150 に答える