2

调用dismissKeyboard 时,我将每个UITextField 添加到resignFirstResponder。

有没有办法我可以获取当前选定的 UITextField 的 id 并将其设为 resignFirstResponder?

#import "NewBabyViewController.h"

@interface NewBabyViewController ()
@property (weak, nonatomic) IBOutlet UITextField *BabyName;
@property (weak, nonatomic) IBOutlet UITextField *BabyNickname;    
@end

@implementation NewBabyViewController

- (void)viewDidLoad
{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissKeyboard)
                                   ];
    [self.view addGestureRecognizer:tap];
}

-(void)dismissKeyboard{

    [self.view endEditing:YES];
    //[self.BabyName resignFirstResponder];
    //[self.BabyNickname resignFirstResponder];
}

-(IBAction)textFieldDone:(id)sender
{
    [sender resignFirstResponder];
}

@end
4

2 回答 2

6

这个问题的解决方案并不十分明显,但实际上非常容易解决。只需使用以下内容:

-(void)dismissKeyboard {
    [self.view endEditing:YES];
}
于 2013-11-15T02:19:34.957 回答
2

您应该自己跟踪第一响应者。有多种方法可以做到这一点,但最简单的一种是更新textFieldDidBeginEditing:.

如果您希望进入灰色区域,则UIApplication和上都有一个私有 API 方法UIWindow- (id)firstResponder它将为您提供当前的第一响应者。我和他们有很好的记录。我更喜欢这种UIWindow方法,当涉及多个窗口时,这种方法更安全。

另一种方式:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
于 2013-11-15T02:19:50.923 回答