在同一个UITableView的单元格中更改UITextField之间的焦点

时间:2014-05-21 07:37:30

标签: ios uitableview uitextfield first-responder

在我的iPad应用程序中,我在编程创建的同一视图上有很少的UITableView。他们必须假装一个多列表。每个单元格包含UITextField。它的大小等于单元格的大小(这是我无法获得UITableView的委托方法didSelect / didDeselect行的原因)。我的问题是当我开始编辑一个文本字段然后尝试将焦点移到其他文本字段时需要两次点击。在第一次点击后没有一个单元格没有编辑。这种行为只在同一个表内观察。如果我想将焦点更改为其他表格,可以在一个点击中进行。我错过了什么?

这是我在Cell类中的UITextField Delegate方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if ([_delegate checkForAccess:self]) {
        if (!((CTKTextField *)textField).isEditable)
        {
            [_delegate callPickerUnderCell:self];
            return NO;
        }
        else
        {
            [_delegate getPosition:self];
            return YES;
        }
    }
    else return NO;
}

-(BOOL) textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    if (_textField.text.length == -1)
    {
        _textField.rightView = nil;
    }
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    NSString *input = textField.text;

    [_delegate saveEdit:self withText:input];
}

3 个答案:

答案 0 :(得分:0)

这可能是由autocapitalizationType引起的。在获得textField becomeFirstResponder之前,您必须先撤消自动更正。禁用它将解决问题。

textField.autocapitalizationType = UITextAutocapitalizationTypeNone;

编辑: 我很困惑,试试这个:

textField.autocorrectionType = UITextAutocorrectionTypeNo;

答案 1 :(得分:0)

尝试使用文本字段将UITableViewCellSelectionStyleNone设置为表格视图单元格。

答案 2 :(得分:0)

如果在第一次点击后调用textFieldShouldBeginEditing并返回YES,则文本字段开始编辑。可能你在之后对整个tableView进行endEditing。

如果在特定单元格上调用endEditing而不是在单元格的委托中调用整个表格视图,它应该可以工作。