我有一个UITextField,在rightView中添加了图片。我已经为此rightView添加了一个手势,并且我想使其在禁用UITextField时起作用,因为该视图仅在不编辑时显示。

这是我想要实现的图像样本:
ios - 禁用UITextField时如何在leftView/rightView中启用水龙头?-LMLPHP

  • leftView只是一个空白空间;
  • rightView仅包含图像。

  • 这是用于将外观应用于UITextField并将图像应用于rightView的代码:
    - (void)applyAppearanceToTextField:(UITextField *)textField withRoundingCorner:(UIRectCorner)corner withIcon:(NSString *)icon {
        CAShapeLayer *shape = [[CAShapeLayer alloc] initWithLayer:textField.layer.mask];
        UIBezierPath *shadow = [UIBezierPath bezierPathWithRoundedRect:textField.bounds byRoundingCorners:corner cornerRadii:CGSizeMake(5, 5)];
        shape.path = shadow.CGPath;
        textField.layer.mask = shape;
    
        // Apply space to the left as a padding
        [textField setLeftView:[[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, textField.bounds.size.height)]];
        [textField setLeftViewMode:UITextFieldViewModeAlways];
    
        // Add the icon image to the right view
        CGFloat height = textField.bounds.size.height;
        UIImage *image = [UIImage imageWithIcon:icon backgroundColor:[UIColor clearColor] iconColor:[UIColor grayColor] andSize:CGSizeMake(height / 2, height / 2)];
        image = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:UIImageOrientationUpMirrored];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        [imageView setBounds:CGRectMake(5, 0, image.size.width, image.size.width)];
        [imageView setUserInteractionEnabled:YES];
        [textField setRightView:imageView];
        [textField setRightViewMode:UITextFieldViewModeUnlessEditing];
        [textField.rightView setExclusiveTouch:YES];
    
        UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleIconTap:)];
        [textField.rightView addGestureRecognizer:tapGesture];
    }
    
    - (void)handleIconTap:(UITapGestureRecognizer *)gesture {
        NSLog(@"handleIconTap");
    }
    

    viewDidLoad中,我检查该字段是否已填充,以便禁用该字段。禁用UITextField后,如何在leftView / rightView中启用水龙头?

    最佳答案

    我使用默认的UITextField组件解决了此问题。我创建了一个布尔属性来处理该值(如果应启用该字段),该字段设置为viewDidLoad:

    isEditEnabled = (self.myTextField.text != nil && self.myTextField.text.lenght > 0);
    

    然后,我实现了textFieldShouldBeginEditing以在单击该isEditEnabled时返回UITextField的值,实现了textFieldDidBeginEditing将textField的backgroundColor设置为白色,并实现了textFieldDidEndEditing将backgroundColor设置为深灰色,并在填充myTextField的情况下设置了isEditEnabled = NO。代码如下:
    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
        if (textField == self.myTextField) {
            return isEditEnabled;
        }
        return YES;
    }
    
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        textField.backgroundColor = [UIColor whiteColor];
        activeField = textField;
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)textField {
        if (textField.text != nil && textField.text.length > 0) {
            if (textField == self.myTextField) {
                textField.backgroundColor = [UIColor colorWithWhite:0.80f alpha:1.0f];
                isEditEnabled = NO;
            }
        } else {
            textField.backgroundColor = [UIColor whiteColor];
            if (textField == self.url) {
                isEditEnabled = YES;
            }
        }
        activeField = nil;
    }
    

    这样,我始终为我的目标启用了leftView和rightView。

    10-02 11:24