UITextField clearButtonMode color

前端 未结 5 570
甜味超标
甜味超标 2020-12-09 10:27

can I change the color of the clearButtonMode on a textField?

theTextField.clearButtonMode = UITextFieldViewModeWhileEditing

shows an x tha

相关标签:
5条回答
  • 2020-12-09 10:54

    Swift 4.1 version

    extension UITextField {
        func modifyClearButtonWithImage(image : UIImage) {
            let clearButton = UIButton(type: .custom)
            clearButton.setImage(image, for: .normal)
            clearButton.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
            clearButton.contentMode = .scaleAspectFit
            clearButton.addTarget(self, action: #selector(UITextField.clear(sender:) ), for: .touchUpInside)
            self.rightView = clearButton
            self.rightViewMode = .whileEditing
        }
    
        @objc func clear(sender : AnyObject) {
            self.text = ""
            sendActions(for: .editingChanged)
        }
    

    }

    0 讨论(0)
  • 2020-12-09 10:55

    Swift version :

    extension UITextField {
    
        func modifyClearButtonWithImage(image : UIImage) {
            let clearButton = UIButton(type: .Custom)
            clearButton.setImage(image, forState: .Normal)
            clearButton.frame = CGRectMake(0, 0, 40, 40)
            clearButton.contentMode = .ScaleAspectFit
            clearButton.addTarget(self, action: #selector(UITextField.clear(_:)), forControlEvents: .TouchUpInside)
            self.rightView = clearButton
            self.rightViewMode = .WhileEditing
        }
    
        func clear(sender : AnyObject) {
            self.text = ""
        }
    
    }
    
    0 讨论(0)
  • 2020-12-09 10:57

    At the time you're configuring the textField, use:

    let clearButton : UIButton = textField.value(forKey: "_clearButton") as! UIButton
    let image = UIImage(named: "ClearWhite")
    
    clearButton.setImage(image, for: .normal)
    clearButton.backgroundColor = UIColor.clear
    
    0 讨论(0)
  • 2020-12-09 11:01

    A cleaner way is to implement a category on UITextField with this method:

    - (void)modifyClearButtonWithImage:(UIImage *)image {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setImage:image forState:UIControlStateNormal];
        [button setFrame:CGRectMake(0.0f, 0.0f, 15.0f, 15.0f)];
        [button addTarget:self action:@selector(clear:) forControlEvents:UIControlEventTouchUpInside];
        self.rightView = button;
        self.rightViewMode = UITextFieldViewModeWhileEditing;
    }
    
    -(IBAction)clear:(id)sender{
        self.text = @"";
    }
    
    0 讨论(0)
  • 2020-12-09 11:09

    You'll need to create your own clear button image in this case. I would suggest taking a screenshot of the clear button and editing in photoshop.

    You can take that image and create a UIButton with the image dimensions. From there you can set it as the UITextField's rightView. Like so:

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:[UIImage imageNamed:@"clear_button.png"] forState:UIControlStateNormal];
    [button setFrame:CGRectMake(0.0f, 0.0f, 15.0f, 15.0f)]; // Required for iOS7
    theTextField.rightView = button;
    theTextField.rightViewMode = UITextFieldViewModeWhileEditing;
    

    I typed that without syntax checking and what not so you'll want to check it out before running it. You'll also want to replace clear_button.png with whatever your image name is.

    You'll also need to write your own method to clear the text field.

    0 讨论(0)
提交回复
热议问题