当文本字段没有IBOutlet时关闭键盘

时间:2015-10-15 10:29:07

标签: ios objective-c iphone uitableview iboutlet

当文本字段没有到视图控制器的IBOutlet时,如何在iOS中关闭键盘?我的案例是带有动态原型单元的UITableView。其中一个单元格包含UITextField,但我无法添加IBOutlet,因为重复内容不允许使用插座。

那么当文本字段没有插座时,如何解除键盘?

5 个答案:

答案 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方法将被调用,键盘将被取消。 希望这会有所帮助。