9

self.delegate = self;それをして何が悪いのですか?それを行う正しい方法は何ですか?

ありがとう、ニル。

コード:

(UITextField*)initWith:(id)sender:(float)X:(float)Y:(float)width:(float)hieght:(int)textFieldTag { 
    if (self = [super initWithFrame:CGRectMake(X, Y,width, hieght)]) {
        finalText = [[NSMutableString alloc] initWithString:@""];
        senderObject = sender;
        self.textColor = [UIColor blackColor]; 
        self.font = [UIFont systemFontOfSize:17.0]; 
        self.backgroundColor = [UIColor whiteColor]; 
        self.autocorrectionType = UITextAutocorrectionTypeNo;   
        self.keyboardType = UIKeyboardTypeDefault;     
        self.returnKeyType = UIReturnKeyDone; 
        self.clearButtonMode = UITextFieldViewModeWhileEditing;    
        self.tag = textFieldTag;        
        self.delegate = self;    
        [sender addSubview:self];
    }
    return self;
} 

: これはテキスト フィールドです。デリゲートを別のオブジェクト (self.delegate = mainView) に設定すると、すべて正常に動作しますが、mainView にデリゲート メソッドを実装する必要があり、それらを配置したいと考えています。 self (私が作成した uiTextField クラス)。self.delegate = self を設定している場合、textField は取得できますが、キーボードが表示されません。

4

1 に答える 1

12

このスレッドを参照してください

http://www.cocoabuilder.com/archive/cocoa/241465-iphone-why-can-a-uitextfield-be-its-own-delegate.html#241505

基本的に、デリゲートとして UITextField をクリックしたときに「フリーズ」する理由は、それ自体をrespondsToSelector呼び出しているためです->無限再帰。

UITextField はユニークな AFAIK です。通常は、クラスを独自のデリゲートとして使用できますが、特に問題はありません。UITextField の場合、実際のデリゲートを作成する必要があります (もちろん、デリゲートである UITextField のメソッドを呼び出すことができます。 ARC を使用している場合でも、保持ループを避けるように注意してください)。

于 2011-11-08T11:14:22.330 に答える