DeckyFx DeckyFx - 1 year ago 134
iOS Question

Custom Clear Button

I want to create custom clear button on UITextField, that is to use rightView and put image there, the problem is attaching the original clear button event to that custom rightView.

In Objective-C i can do that this way:

SEL clearButtonSelector = NSSelectorFromString(@"clearButton");
// Reference clearButton getter
IMP clearButtonImplementation = [self methodForSelector:clearButtonSelector];
// Create function pointer that returns UIButton from implementation of method that contains clearButtonSelector
UIButton * (* clearButtonFunctionPointer)(id, SEL) = (void *)clearButtonImplementation;
// Set clearTextFieldButton reference to “clearButton” from clearButtonSelector
UIButton *_clearTextFieldButton = clearButtonFunctionPointer(self, clearButtonSelector);
[_clearTextFieldButton setImage:[UIImage imageNamed:@"icon_remove"] forState:UIControlStateNormal];
self.hasClearButtonAsRightView = YES;

now how to convert this to Swift?
or any ideas to workaround it?

Answer Source

You can add a custom button as right view of the UITextField like this

class CustomTextField : UITextField
    override init(frame: CGRect) {
        super.init(frame: frame)

        let clearButton = UIButton(frame: CGRectMake(0, 0, 15, 15))
        clearButton.setImage(UIImage(named: "clear.png")!, forState: UIControlState.Normal)

        self.rightView = clearButton
        clearButton.addTarget(self, action: "clearClicked:", forControlEvents: UIControlEvents.TouchUpInside)

        self.clearButtonMode = UITextFieldViewMode.Never
        self.rightViewMode = UITextFieldViewMode.Always

    func clearClicked(sender:UIButton)
        self.text = ""

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download