触摸外面的tableView时隐藏键盘

时间:2012-11-12 15:33:16

标签: iphone objective-c ios

  

可能重复:
  Dismiss keyboard on touch anywhere outside UITextField

界面构建器中的

MyViewController:

enter image description here

在我的自定义TableViewCell中,我有一个TextField。 My plan is disappear KeyPad when User Clicks outside the touchpad.

我无法使用UITapGestureRecognizer

使其有效

在viewDidLoad中:

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
[self.tableView addGestureRecognizer:gestureRecognizer];

然后我应该如何使用cell.TextField

我读到了这个解决方案here

[self.view endEditing:YES];

[[self.tableView superView] endEditing];

我无法让它工作。我应该在哪里使用它们?

或者如果你有更好的方法,请告诉我。

修改

我无法使其发挥作用:

@property (nonatomic, strong) UITextField *cellTextField;

在viewDidLoad中:

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
    [self.settingTableView addGestureRecognizer:gestureRecognizer];

我们有:

- (void) hideKeyboard {
    [self.cellTextField resignFirstResponder];
}

并且:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    SettingTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


    self.cellTextField = cell.dataEdit;

我的错是什么?

5 个答案:

答案 0 :(得分:0)

您可以向视图控制器添加属性,例如

@property (nonatomic, strong) UITextField *cellTextField

然后将cell.TextField分配给它。

hideKeyboard:

你可以通过

关闭键盘

[cellTextField resignFirstResponder];

您应该在textField本身上调用resignFirstResponder,而不是控制器的视图。

答案 1 :(得分:0)

添加[cellTextField resignFirstResponder];希望这有效......

或许请查看UITextFieldDelegate,特别是- (BOOL)textFieldShouldReturn:(UITextField *)textField

答案 2 :(得分:0)

如果您将整个屏幕自定义UIButton,则可以隐藏键盘。然后附加此方法使用此自定义UIButton.set,在实现此方法之前,在“接口”构建器中使用UITextField标记= 1。

-(IBAction)HideKeyboard
{
    [[self.view viewWithTag:1]resignFirstResponder];
}

注意:如果您想在CustomCell中单击隐藏键盘然后将此UIButton放在那里,或者您可以使用手势识别来调用此方法,就像您在不使用自定义UIButton的代码中一样。 并确保你连接UITextField委托。希望这项工作。

答案 3 :(得分:0)

你可以试试这个。

- (void) hideKeyboard {
    [self.view endEditing:YES];
}

答案 4 :(得分:0)

您可以通过插入以下方法来完成此任务

您必须实现UITextFieldDelegate

您必须在故事板中或在开始加载表格的单元格时为文本字段设置标记

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    self.currentIndexPath = [(UITableView*)textField.superview.superview.superview indexPathForCell:(UITableViewCell*)textField.superview.superview];
    self.currentTableView = (UITableView*)textField.superview.superview.superview;
    self.keyboardIsShown = YES;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:self.view];
    if(self.keyBoardIsShown)
    {
        [self dismissKeyboard:currentPoint UsedTableView:self.myTableView IndexPathForRow:self.currentIndexPath TexFieldTag:tag];
        self.keyBoardIsShown = NO;
    }
}

-(void)dismissKeyboard:(CGPoint)currentPoint UsedTableView:(UITableView*)table IndexPathForRow:(NSIndexPath*)indexPath TexFieldTag:(int)tag
{
    UITableViewCell *cell = [table cellForRowAtIndexPath:indexPath];
    if(!CGRectContainsPoint([self.view convertRect:[cell viewWithTag:tag].frame fromView:[cell viewWithTag:tag].superview.superview], currentPoint))
    {
        [(UITextField*)[cell viewWithTag:tag] resignFirstResponder];
    }
}