【问题标题】:The second tap on UITextField (within a UITableViewCell subclass) unexpectedly dismisses the keyboard第二次点击 UITextField(在 UITableViewCell 子类中)意外关闭键盘
【发布时间】:2012-04-09 13:30:16
【问题描述】:

我正在实现一个包含几个自定义 UITableViewCells 的 UITableView,每个 UITableViewCells 都包含 UITextField。

与大多数希望键盘在某些事件时消失的人不同,我希望它一直出现。 问题是第一次点击 UITextField 会触发键盘出现而没有任何问题。但是一旦我再次点击它,当前出现的键盘就会消失。

此外,另一个相关问题是我无法更改光标在 UITextField 中的位置。 一旦我按住 UITextField 以更改光标的当前位置,放大镜就会按预期弹出。但是一旦我松开水龙头,键盘就会立即关闭。

我该如何解决这个问题?

- (void)viewDidLoad
{
    ...
    TagDetailCell *cell1 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject];
    TagDetailCell *cell2 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject];
    TagDetailCell *cell3 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject]; 
    self.cells=[NSArray arrayWithObjects:cell1, cell2, cell3, nil];
    ...
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[self.cells objectAtIndex:indexPath.row];
    cell.selectionStyle=UITableViewCellSelectionStyleNone;

    switch (indexPath.row) {
        ...
        ((TagDetailCell*)cell).fieldLabel.text= ...;
        ((TagDetailCell*)cell).fieldValue.clearButtonMode=UITextFieldViewModeWhileEditing;
        ((TagDetailCell*)cell).fieldValue.text=...;
        [((TagDetailCell*)cell).fieldValue addTarget:self action:@selector(textFieldChanged:) forControlEvents:UIControlEventEditingChanged];
        ...
    }
    return cell;

}

我没有实现 UITextField 的任何委托。我应该吗?

【问题讨论】:

    标签: ios uitableview uitextfield


    【解决方案1】:

    我是愚蠢的。我继承了 UITextField 并重写了以下方法,以防止用户复制/粘贴文本:

    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender    
    {    
        [UIMenuController sharedMenuController].menuVisible = NO;  //do not display the menu
        [self resignFirstResponder];                      //do not allow the user to selected anything
        return NO;
    }
    

    键盘关闭的问题来自[self resignFirstResponder]的调用。因此,删除它可以解决问题。

    【讨论】:

      【解决方案2】:

      查看文档中的UIViewController 方法disablesAutomaticKeyboardDismissal
      引用 Apple 文档:

      在子类中重写此方法以允许或禁止解雇 更改时的当前输入视图(通常是系统键盘) 从需要输入视图的控件到不需要的控件。在下面 正常情况下,当用户点击需要 输入视图,系统自动显示该视图。敲入一个 不想要输入视图的控件随后会导致 当前输入视图将被关闭,但可能并非在所有情况下。你可以 在那些突出的情况下覆盖此方法以允许输入 视图被关闭或使用此方法防止视图被关闭 在其他情况下被解雇。

      【讨论】:

      • 感谢您提供有用的信息。我以前不知道这一点。但是,即使我在disablesAutomaticKeyboardDismissal 中返回YES,键盘仍然会消失。将演示文稿样式设置为 UIModalPresentationFormSheet 也无济于事。
      • 我试图确保disablesAutomaticKeyboardDismissal 被正确调用,但这个函数根本没有被调用。有什么想法吗?
      • 尝试将UITextField 的代理设置为您的视图控制器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 2015-07-03
      • 1970-01-01
      相关资源
      最近更新 更多