我正在实现一个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的任何委托。我应该吗?
答案 0 :(得分:1)
- (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]
的召唤。因此,删除它可以解决问题。
答案 1 :(得分:0)
查看文档中的UIViewController
方法disablesAutomaticKeyboardDismissal
引用Apple文档:
在子类中重写此方法以允许或禁止解雇 更改时的当前输入视图(通常是系统键盘) 从想要输入视图的控件到不需要输入视图的控件。下 正常情况下,当用户点击需要的控件时 在输入视图中,系统自动显示该视图。攻击一个 不希望输入视图的控件随后导致 当前输入视图将被解除,但可能并非在所有情况下都被忽略。您可以 在那些未完成的情况下覆盖此方法以允许输入 视图被解雇或使用此方法来阻止视图 在其他情况下被驳回。