self.delegate = self; что плохого в этом? - PullRequest
9 голосов
/ 17 ноября 2009

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 , и я хотел бы поместить их в себя (класс uiTextField, который я создал). Если я устанавливаю self.delegate = self, я получаю textField, но клавиатура не появляется.

1 Ответ

12 голосов
/ 08 ноября 2011

см. Эту тему

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 ).

...