2010-08-07 45 views

回答

2

在其他视图或视图中捕捉触摸。在处理该触摸时,请调用一个让您的视图恢复响应者状态的选择器。

0

做研究时发现更好的答案...

Get the current first responder without using a private API

有如何导航意见,找到的第一个响应者,其可作为您的解决方案的基础示例代码

您可以先放置透明视图,然后再将视图作为子视图。然后,可以使用透明视图中的任何触摸事件来辞退第一响应者。

如果有多个视图,这可能是一种方法,主视图的边界之外进行管理

-1
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [yourtextfield resignFirstResponder]; 
    //You can have multiple textfields in here 
} 
+3

你能否解释一下你的答案,至少粗略一点? – 2015-01-09 14:40:43

+0

当用户在屏幕上触摸时,这个委托方法将会调用,因为这是UIViewController类的子类viewcontroller类。所以在调用此方法时,我们调用UITextField委托方法“resignFirstResponder”。 – 2015-01-10 12:05:45

0

这是很简单的,需要在两个步骤覆盖:

  1. 添加手势识别器赶上视图抽头
  2. 辞职第一响应

感谢@Nathan Eror为first part。我们可以添加一个手势识别器到viewDidLoad方法来注册时,用户点击屏幕:

UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
[self.view addGestureRecognizer:singleFingerTap]; 

下一步,我们将增加检测此功能和代码来清除键盘:

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { 
CGPoint location = [recognizer locationInView:[recognizer.view superview]]; 

    [textField resignFirstResponder]; 
} 

值得注意的是,如果您的视图中有多个textField,您将需要全部辞职,因为没有办法知道哪个是当前的第一响应者。

相关问题