如何停止UIButton(用作自定义清除按钮)将文本字段作为第一响应者重新签名?

时间:2013-02-23 17:30:06

标签: ios uibutton uitextfield first-responder

我需要为UITextField创建一个自定义清除按钮(因为我的配色方案)。我正在使用以下代码(其中类是UITextField后代):

UIButton *clearButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[clearButton setImage:[UIImage imageNamed:@"ClearButton.png"] forState:UIControlStateNormal];
[self setRightView:clearButton];
[self setRightViewMode:UITextFieldViewModeNever];
[clearButton addTarget:self action:@selector(clear:) forControlEvents:UIControlEventTouchUpInside];

大多数情况下都可行。问题是单击清除按钮会导致UITextField重新响应第一响应者状态(即键盘消失)。我希望UITextField保持专注。

我尝试了恢复在清澈的按钮操作的第一个响应者的地位,但是,如果的UITextField是一个UITableView - 和滚动 - 这会导致一些不良的滚动在表中的键盘关闭和打开

我可以使用UIImageView而不是UIButton,但是当按下按钮时我不会得到视觉“脉冲”。

那么,当按下按钮时,有没有办法让UITextField保持第一响应者状态?

我正在使用iOS 6开发iPhone应用程序。

[注意:“清除:”操作目标只是清空了文本字段,但是,无论如何,即使我没有设置目标,也会出现问题。]

2 个答案:

答案 0 :(得分:1)

也许我不明白你的问题,但我认为问题可能在于,你想在textField上做第一个响应者,这在你的tableView上是不可见的。这不可能发生。您必须先显示包含textField的行,然后才能将其作为第一响应者:

NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:yourIndex inSection:0];
[self.tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

而不是:

[self.textField becomeFirstResponder];

答案 1 :(得分:1)

找到原因。我有一个手势识别器,用于在用户点击“背景”时处理关闭键盘。用户单击文本字段上的关闭按钮时会激活该文件。

我最终实施了:

gestureRecognizer:shouldReceiveTouch:

过滤掉清除按钮。