2013-03-14 63 views
1

我有一个扩展UITextfield的类。我也有相同的类设置为它自己的委托,所以当选择文本字段时,我可以更改背景颜色。一旦我选择了文本字段并输入了几个字母,该应用就会锁定并崩溃。为什么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 

回答

1

的委托始终是另一个UIViewController,因为事件由其中定义了协议的另一个类委派给它。

当您可以访问同一个类中的所有变量和方法时,在同一个类中不需要委托方法。

你只需拨打[self someFunction]即可。

由于您正在继承UITextField,因此无需为UITextField委托定义一个属性。您只需将其设置为不同的viewController即可。

此外,定义协议的类只是声明,它不符合协议。

委托将是符合协议的类。

1

订阅UITextFieldTextDidBeginEditingNotificationUITextFieldTextDidEndEditingNotificationNSNotification s。在回调中检查通知对象是否是自己的。然后对它执行一些操作。

相关问题