我有一个禁用用户交互的 UITextField。因此,如果您点击此文本字段,则不会发生任何事情。通常要检查是否点击了文本字段 Id 尝试委托方法,但我不能,因为用户交互被禁用。有什么方法可以检查文本字段是否被点击/触摸?我将另一个元素更改为 hidden = no; 当它被点击时,我想知道它是否甚至可以启用用户交互。
问问题
22821 次
2 回答
44
最好的选择是使用委托方法打开用户交互并禁用编辑操作。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return NO;
}
您可以在该函数中调用您的方法来检测点击。
于 2013-09-10T22:12:42.187 回答
24
也许,您可以UITapGestureRecognizer
在superview中添加,检测触摸是否在框架内,然后做一些事情。
检测触摸是否在超级视图的框架内
- 创建
UITapGestureRecognizer
并将其添加到UITextField
的超级视图。 - 实现目标选择器并检查手势的状态是否已结束。
- 调用你的方法。
Objective-C
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizeTapGesture:)];
[self.textField.superview addGestureRecognizer:tapGesture];
- (void) didRecognizeTapGesture:(UITapGestureRecognizer*) gesture {
CGPoint point = [gesture locationInView:gesture.view];
if (gesture.state == UIGestureRecognizerStateEnded) {
if (CGRectContainsPoint(self.textField.frame, point)) {
[self doSomething];
}
}
}
斯威夫特 3
func viewDidLoad() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didRecognizeTapGesture(_:)))
textField.superView?.addGestureRecognizer(tapGesture)
}
private dynamic func didRecognizeTapGesture(_ gesture: UITapGestureRecognizer) {
let point = gesture.location(in: gesture.view)
guard gesture.state == .ended, textField.frame.contains(point) else { return }
//doSomething()
}
于 2013-09-10T22:10:37.747 回答