0

我正在实现一个包含几个自定义 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 的任何代表。我是不是该?

4

2 回答 2

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]. 因此,删除它可以解决问题。

于 2012-04-12T15:38:53.043 回答
0

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

在子类中重写此方法以在从需要输入视图的控件更改为不需要的控件时允许或禁止关闭当前输入视图(通常是系统键盘)。在正常情况下,当用户点击需要输入视图的控件时,系统会自动显示该视图。在不需要输入视图的控件中轻按随后会导致当前输入视图被关闭,但可能并非在所有情况下都如此。您可以在那些未解决的情况下覆盖此方法以允许关闭输入视图或使用此方法来防止在其他情况下关闭视图。

于 2012-04-09T14:09:34.687 回答