1

我有一个扩展 UITextfield 的类。I also have the same class set to be it's own delegate so when the text field is selected I can change the background color. 一旦我选择了文本字段并输入了几个字母,应用程序就会锁定并崩溃。

这是我的 .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
4

3 回答 3

1

订阅UITextFieldTextDidBeginEditingNotificationUITextFieldTextDidEndEditingNotification NSNotifications。在回调中检查通知对象是否为 self。然后对其执行一些操作。

于 2013-03-14T12:14:39.137 回答
1

委托总是另一个UIViewController,因为事件是由定义协议的另一个类委托给它的。

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

您只需调用[self someFunction].

当您继承 UITextField 时,您甚至不需要为 UITextField 委托定义属性。您只需将其设置为不同的 viewController。

定义协议的类也只有声明,它不符合协议。

委托将是符合协议的类。

于 2013-03-14T11:17:55.267 回答
0

这个问题的讨论应该引导你朝着正确的方向self.delegate = self; 这样做有什么问题?

于 2013-03-14T11:14:14.307 回答