【问题标题】:Using same UITextFieldDelegate methods in custom UIView and in UIViewController simultaneously同时在自定义 UIView 和 UIViewController 中使用相同的 UITextFieldDelegate 方法
【发布时间】:2014-04-17 02:38:36
【问题描述】:

我有一个UIView(名为 HCTextFieldView),上面有子视图:UITextFieldUILabel

UITextField's委托等于自己。委托方法textFieldDidBeginEditingtextFieldDidEndEditing 执行文本字段的背景高亮效果。

接下来我将在我的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];
}

【问题讨论】:

    标签: ios uitextfield appdelegate uitextfielddelegate


    【解决方案1】:

    HCBaseTextField 中设置一个delegate 喜欢

    HCBaseTextField.h中添加一个属性

    @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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多