我需要为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应用程序。
[注意:“清除:”操作目标只是清空了文本字段,但是,无论如何,即使我没有设置目标,也会出现问题。]
答案 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:
过滤掉清除按钮。