3

触摸屏幕上的其他任何位置后,我试图隐藏键盘。我正在使用的代码基于此答案here。

IBOutlet UITextView *myTextView;

和方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    if ([myTextView isFirstResponder] && [touch view] != myTextView) {
        [myTextView resignFirstResponder];
    }
    [super touchesBegan:touches withEvent:event];
}

我不明白我应该如何将我的 UITextField 链接到该touchesBegan方法。我需要使用哪个已发送事件?此外,该方法不应该是 IBAction,因为现在我无法将我的 UITextField 连接到它。

我也尝试了这段代码,但那个代码破坏了我的导航按钮(即使使用评论中提到的解决方案)

4

6 回答 6

26

目标 C:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     [[self view] endEditing:YES];
}

迅速:

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    self.view.endEditing(true)
}

这是我找到的最好的方法,而且非常简单。

于 2012-09-01T14:21:36.367 回答
6

我应该如何将我的 UITextField 链接到 touchesBegan 方法。我需要使用哪个已发送事件?此外,该方法不应该是 IBAction,因为现在我无法将我的 UITextField 连接到它。

因为你没有。您必须在文本字段是子视图的视图上覆盖此方法。

于 2012-09-01T12:50:32.200 回答
4

我所做的是将整个 UIView 类更改为 UIControl。 在此处输入图像描述

这为您提供了一个 touchDown 事件,您可以将其链接到 resignFirstResponder 的方法。 在此处输入图像描述
UIControl 仍然为您提供 UIView 的所有功能。

-(IBAction)backgroundTap:(id)sender
{
    [text1 resignFirstResponder];
    [text2 resignFirstResponder];
    [textLogin resignFirstResponder];
    [textPassword resignFirstResponder];
} // Resign all responders
于 2012-09-01T12:57:05.117 回答
0
- (void)viewDidLoad
{
     //for keybord hide when touch outside:


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



    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}


-(void)hidekeybord
{

    [_yourtextfield.txt resignFirstResponder];

}
于 2014-03-24T07:32:13.290 回答
0
In .h
@property (nonatomic, assign) id currentResponder;

In .h
//in viewDidLoad:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignOnTap:)];
    [singleTap setNumberOfTapsRequired:1];
    [singleTap setNumberOfTouchesRequired:1];
    [self.view addGestureRecognizer:singleTap];

//Implement the below delegate method:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.currentResponder = textField;
}

//Implement resignOnTap:

- (void)resignOnTap:(id)iSender {
    [self.currentResponder resignFirstResponder];
}
于 2014-08-25T13:49:17.633 回答
-2

尝试快速而肮脏的方式:

取一个按钮并将其链接到一个操作方法(我们称之为背景)。拉伸按钮,使其覆盖整个视图。调整视图的图层,以便只有用户通过触摸进行交互的内容位于按钮顶部。将按钮的类型更改为自定义,这会使按钮不可见。关闭方法 Background 中的 firstResponder。

于 2012-09-01T12:52:17.803 回答