2013-02-23 46 views
0

我需要为UITextField创建自定义清除按钮(因为我的配色方案)。我使用下面的代码(其中类是UITextField派生类):如何停止UIButton(用作自定义清除按钮)将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应用程序

[注:在“明确表示:”行动的目标只是清空文本字段,但是,无论如何,即使我没有设置出现我的问题目标。]

回答

1

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

我最终实现:

gestureRecognizer:shouldReceiveTouch: 

滤除清除按钮。

1

也许我不明白你的问题,但我认为问题可能在于,你想让你的tableView上看不到的textField的第一响应者。这不可能发生。你必须先秀行包含您的文本框,比你可以把它作为第一个响应:

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

比:

[self.textField becomeFirstResponder]; 
+0

感谢您的回复。文本字段在这一点上是绝对可见的。必须让我能够点击清除按钮。 – dommer 2013-02-23 19:39:17