2009-11-17 75 views
9

self.delegate = self;这样做有什么问题? 以及正确的做法是什么?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,但键盘不显示。

+0

请澄清一下:你为什么知道我错了。发生了什么 – 2009-11-17 10:04:31

+0

嗨。这是一个文本字段, ,当我将代理设置为另一个对象(self.delegate = mainView)时,一切正常,但是随后我将不得不在mainView中实现委托方法,并且我想将它们放入自己(我创建的一个uiTextField类)。 如果我设置self.delegate = self,我会得到一个textField,但键盘不显示。 – Tiger 2009-11-19 07:02:56

+0

在OP中添加了对该问题的评论。 – 2015-05-20 00:49:08

回答

12

看到这个线程

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

基本上,“冻结”当你作为一个代表是respondsToSelector被自称点击你的UITextField与自身的原因 - >无限递归。

UITextField是唯一AFAIK。你通常可以使用一个类作为自己的委托,没有特别的问题。对于UITextField,您必须创建一个实际的委托(当然,这可以调用UITextField上的委托方法),请注意避免保留循环,即使您使用ARC也是如此()。

+1

仅供参考:iOS 8以上允许self.delegate =自我引用。 – 2015-08-04 13:59:29