2013-03-14 80 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。在回調中檢查通知對象是否是自己的。然後對它執行一些操作。