0

可能重复:
在 UITextField 之外的任何地方触摸时关闭键盘

界面生成器中的 MyViewController :

在此处输入图像描述

在我的自定义 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呢?

我在这里读到了这个解决方案:

[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;

我的错是什么?

4

5 回答 5

0

如果您放置全屏自定义 UIButton,则可以隐藏键盘。然后使用此自定义 UIButton 附加此方法。在实施此方法之前,在界面生成器中设置 UITextField 标记 =1。

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

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

于 2012-11-12T16:42:08.143 回答
0

你可以试试这个。

- (void) hideKeyboard {
    [self.view endEditing:YES];
}
于 2012-11-12T18:20:35.973 回答
0

你可以向你的视图控制器添加一个属性,比如

@property (nonatomic, strong) UITextField *cellTextField

然后将 cell.TextField 分配给它。

hideKeyboard:你可以通过做关闭键盘

[cellTextField resignFirstResponder];

您应该调用resignFirstRespondertextField 本身,而不是控制器的视图。

于 2012-11-12T15:40:14.030 回答
0

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

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

于 2012-11-12T15:42:29.847 回答
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];
    }
}
于 2012-11-13T08:34:47.233 回答