2014-04-17 28 views
5

我有一个UIView(名为HCTextFieldView),子视图:UITextFieldUILabel上面。同时在自定义UIView和UIViewController中使用相同的UITextFieldDelegate方法

UITextField's委托等于自己。代表方法textFieldDidBeginEditingtextFieldDidEndEditing执行文本框的背景突出显示效果。

Next我在我的UIViewController中使用此自定义UIView(HCTextFieldView)。要处理工具栏中的“下一个”和“上一个”按钮的动作(附加在文本框的键盘上),我需要在UIViewController但是代理被覆盖的情况下使用相同的文本框代理方法。

**@interface HCBaseTextField : UIView <UITextFieldDelegate>** 
... 
@end 

**@implementation HCBaseTextField {}** 

... 

textField = [[UITextField alloc] initWithFrame:CGRectMake(0, titleLabel.bottom, self.width - 20, self.height - titleLabel.height)]; 
**textField.delegate = self**; 

... 

#pragma mark - UITextField delegate 

//textFieldBG - UIImageView that act as background 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    [textFieldBg setImage:[[UIImage imageWithName:@"btn_vvod_medium_act"] stretchableImageWithLeftCapWidth:10 topCapHeight:10]]; 
    return YES; 
} 

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField { 
    [textFieldBg setImage:[[UIImage imageWithName:@"btn_vvod_medium_norm"] stretchableImageWithLeftCapWidth:10 topCapHeight:10]]; 
    return YES; 
} 

... 

@end 


**ViewController : UIViewController** 

... 

HCTextFieldView *textFieldView = [[HCTExtFieldView alloc] init]; 
textFieldView.textField.delegate = self; 

... 

//I need to use this methods too but they override previous in UIView delegate 
- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [self.keyboardControls setActiveField:textField]; 
} 

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    [self.keyboardControls setActiveField:textView]; 
} 

回答

6

HCBaseTextField.h坐落在HCBaseTextField一个delegate

添加属性

@property (nonatomic, assign) id<UITextFieldDelegate> textFieldDelagate; 

HCBaseTextField.m

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 

    .... 
    if (self.textFieldDelagate && [self.textFieldDelagate respondsToSelector:@selector(textFieldShouldBeginEditing:)]) { 
     [self.textFieldDelagate textFieldShouldBeginEditing:textField]; 
    } 
    return YES; 
} 

- (void) textFieldDidBeginEditing:(UITextField *)textField { 
    .... 

    if (self.textFieldDelagate && [self.textFieldDelagate respondsToSelector:@selector(textFieldDidBeginEditing:)]) { 
     [self.textFieldDelagate textFieldDidBeginEditing:textField]; 
    } 
} 

... //Other delegate methods if needed 

的ViewController:UIViewController中

... 

HCTextFieldView *textFieldView = [[HCTExtFieldView alloc] init]; 

textFieldView.textFieldDelagate = self; 

... 

和实施委托方法。

- (void) textFieldDidBeginEditing:(UITextField *)textField { 
    .... 

    //Do the stuff 
} 
相关问题