当在视图之外点击时,让 UIView 辞职第一响应者
Posted
技术标签:
【中文标题】当在视图之外点击时,让 UIView 辞职第一响应者【英文标题】:Make UIView resign first responder when tapped outside of view 【发布时间】:2010-08-07 16:35:14 【问题描述】:当用户在视图边界之外点击时,有什么方法可以让 UIView 放弃其第一响应者状态?
【问题讨论】:
【参考方案1】:在另一个或多个视图中捕获触摸。处理该触摸时,调用一个选择器,让您的视图放弃其响应者状态。
【讨论】:
【参考方案2】:在做研究时找到了更好的答案...
Get the current first responder without using a private API
有关于如何导航视图以找到第一响应者的示例代码,可用作您解决方案的基础
您可以先放置一个透明视图,然后再放置一个子视图。然后可以使用透明视图中的任何触摸事件来让第一响应者辞职。
如果在要管理的主视图边界之外有多个视图,这可能是一种方法
【讨论】:
【参考方案3】:这很简单,需要分两个步骤来介绍:
-
添加手势识别器以捕捉视图点击
辞去第一响应者的职务
感谢@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];
值得注意的是,如果您的视图中有多个文本字段,则需要将它们全部退出,因为无法通过触摸知道哪个是当前的第一响应者。
【讨论】:
【参考方案4】:-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
[yourtextfield resignFirstResponder];
//You can have multiple textfields in here
【讨论】:
能否请您至少大致解释一下您的答案? 当用户触摸屏幕时,此委托方法将调用,因为这是 UIViewController 类的子类 viewcontroller 类。因此,在调用此方法时,我们调用 UITextField 委托方法“resignFirstResponder”。跨度>以上是关于当在视图之外点击时,让 UIView 辞职第一响应者的主要内容,如果未能解决你的问题,请参考以下文章
UITextField,辞职第一响应者时,导致文本的奇怪动画滚动
iPhone-在 UITextField 上辞职第一响应者后,无法重新聚焦
使用 UINavigationController 时在 didSelectRowAtIndexPath 中辞职第一响应者