在UITextField中使用UIButton作为清除按钮

时间:2013-09-08 18:42:47

标签: ios objective-c uibutton uitextfield

我想要做的是在UITextField中做一个自定义清除按钮,目前除了最后一部分我已经完成了所有工作。这是为了让它成为明确的行动。但是,我还没有弄清楚我是如何清除它的,只是它所在的textField。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    [textField setTextColor:[UIColor colorWithRed:0.56f green:0.56f blue:0.56f alpha:1.00f]];
    [textField setFont:[UIFont systemFontOfSize:14]];
    textField.background = [UIImage imageNamed:@"whiteCell"];

    UIButton *btnColor = [UIButton buttonWithType:UIButtonTypeCustom];
    [btnColor addTarget:self action:@selector(clearText:) forControlEvents:UIControlEventTouchUpInside];
    btnColor.frame = CGRectMake(0, 0, 25, 25);
    [btnColor setBackgroundImage:[UIImage imageNamed:@"clearBut"] forState:UIControlStateNormal];
    textField.rightView = btnColor;
    textField.rightViewMode = UITextFieldViewModeAlways;
    [textField addSubview:btnColor];


    return YES;
}

这就是我在textField中创建按钮的方式,并且只在编辑时显示,因为你可以看到我调用clearText然而我不确定如何发送当前的textField我在clearText电话中清除姓名。

我知道我可以用很难的方式去做,并为每个textFields单独定义它,但我确信有一个更简单的方法可以解决这个问题,我还没有意识到。

2 个答案:

答案 0 :(得分:1)

我建议继承UITextField。这将不允许您在Storyboard中布置按钮,但在Code或.nib文件中应该可以工作。当然,您可以在故事板中使用UITextfield子类。

在子类中添加UIButton作为子视图,并在其操作方法调用中: self.text = @""

如果您有任何其他问题,请与我们联系。

答案 1 :(得分:0)

鉴于您的按钮已作为子视图添加到文本字段,您可以转到按钮superview属性中的文本字段:

- (void) clearText:(UIButton*)sender
{
    UITextField* textField = (UITextField*)sender.superview;
    textField.text = nil;
}