当文本字段没有到视图控制器的IBOutlet时,如何在iOS中关闭键盘?我的案例是带有动态原型单元的UITableView。其中一个单元格包含UITextField,但我无法添加IBOutlet,因为重复内容不允许使用插座。
那么当文本字段没有插座时,如何解除键盘?
答案 0 :(得分:1)
在 ViewController.m 文件中添加任何一种方法:
选择-1
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
选择-2
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignFieds)];
[self.view addGestureRecognizer:tap];
- (void)resignFieds {
//choice - 1 , check the all subviews and resign textfield
for (UIView * txt in self.view.subviews){
if ([txt isKindOfClass:[UITextField class]] && [txt isFirstResponder]) {
[txt resignFirstResponder];
}
else
{
[self.view endEditing:YES];
}
}
//choice 2 , no need to check any subviews ,
[self.view endEditing:YES];
Note : use any one choice
}
答案 1 :(得分:0)
您可以使用:
[view endEditing:YES];
答案 2 :(得分:0)
尝试这些..
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(taped:)];
[tap setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:tap];
-(void)taped:(UITapGestureRecognizer*)gesture
{
[self.view endEditing:YES];
}
OR
你也可以这样做..
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
if (![[touch view] isKindOfClass:[UITextField class]])
{
[self.view endEditing:YES];
}
[super touchesBegan:touches withEvent:event];
}
我希望它有所帮助......
答案 3 :(得分:0)
试试这个: -
在斯威夫特: -
UIApplication.sharedApplication().sendAction(Selector("resignFirstResponder"), to: nil, from: nil, forEvent: nil)
在Objective-C中: -
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
说明: -
我们可以通过在UIApplication单例上调用sendAction:to:from:forEvent并将nil作为目标传递给第一响应者,并且在你的情况下你的第一个响应者就是你的文本域。
答案 4 :(得分:0)
我假设您已经创建了自定义动态原型单元格,其中包含UITextField。
在您添加了UITableView的ViewController类中,无需使用UITextField的IBOutlet。
创建自定义TableViewCell类,然后在自定义TableViewCell类中创建UITextField的IBOutlet。
@interface SimpleTableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UITextField *simpleTxtField;
@end
将TableViewCell类设置为Custom TableViewCell类说“SimpleTableViewCell”。选择TableViewCell并在Xcode的右侧窗格中选择Identity Inspector图标。
您的ViewController类中的确认到UITextField Delegate。像这样。
@interface ViewController () <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITableView *simpleTableView;
@end
实现UITextField委托方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
然后在tableView:UITableView数据源的cellForRowAtIndexPath方法中将自定义TableViewCell的(SimpleTableViewCell)TextField委托设置为self。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
SimpleTableViewCell *cell = [self.simpleTableView dequeueReusableCellWithIdentifier:@"simpleCell" forIndexPath:indexPath];
cell.simpleTxtField.delegate = self;
return cell;
}
每当您选择Cell的TextField时,将显示一个键盘,当您单击返回键时,TextField Delegate方法将被调用,键盘将被取消。 希望这会有所帮助。