这个问题已经被问过几次了,但我似乎不明白。

我有一个视图控制器,带有两个文本字段,一个分段控件,一个日期选择器和几个标签。

当用户单击背景或分段控件或日期选择器时,我想关闭键盘。
这是我的.h文件:

@interface MRPatientenViewController : UIViewController
@property (nonatomic, strong) MRPatientenTableViewController *delegate;
- (IBAction)textFieldReturn:(id)sender;
@property (strong, nonatomic) IBOutlet UITextField *nachnameTextField;
@property (strong, nonatomic) IBOutlet UITextField *vornameTextField;
@property (strong, nonatomic) IBOutlet UIDatePicker *geburtsdatumPicker;
@property (strong, nonatomic) IBOutlet UISegmentedControl *genderSegmentedControl;
@end


这是我的.m文件:

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

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
if ([_nachnameTextField isFirstResponder] && [touch view] != _nachnameTextField) {
    [_nachnameTextField resignFirstResponder];
}
else if ([_vornameTextField isFirstResponder] && [touch view] != _vornameTextField) {
    [_vornameTextField resignFirstResponder];
}
[super touchesBegan:touches withEvent:event];
}


现在,如果触摸了背景或标签,则关闭键盘。

但是,如果触摸UISegmentedControldatepicker,如何关闭键盘?

最佳答案

您的Touch代码正确无误,但在我的代码中也可以正常工作。当您单击文本字段之外的时间时,Touch事件调用但其内部条件无法正常工作。我删除条件并检查其是否正常。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [nachnameTextField resignFirstResponder];
    [super touchesBegan:touches withEvent:event];
}

07-26 09:38