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

Posted

技术标签:

【中文标题】在同一 UITableView 的单元格中更改 UITextFields 之间的焦点【英文标题】:Changing focus between UITextFields in cells at same UITableView 【发布时间】:2014-05-21 07:37:30 【问题描述】:

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

这是我在 Cell 类中的 UITextField 委托方法

- (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];

【问题讨论】:

【参考方案1】:

如果在第一次点击后调用textFieldShouldBeginEditing,然后您返回YES,则文本字段开始编辑。可能你在那之后把endEditing变成了整个tableView

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

【讨论】:

【参考方案2】:

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

textField.autocapitalizationType = UITextAutocapitalizationTypeNone;

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

textField.autocorrectionType = UITextAutocorrectionTypeNo;

【讨论】:

@VictorIppolitov 所以我想一些屏幕截图或代码片段会有所帮助并且更清晰。 那么您在哪里应用了我的解决方案?直接在 textField 的委托中还是在它的创建点? 我的 textField 是一个自定义类,所以我在我的 textField 类的 initWithFrame 方法中添加了您的解决方案。我也尝试在创建 textField 对象时添加它。 @VictorIppolitov 很抱歉感到困惑,我只是编辑我的答案。希望会是这样。【参考方案3】:

尝试将 UITableViewCellSelectionStyleNone 设置为带有文本字段的表格视图单元格。

【讨论】:

当您关注下一个文本字段时,检查是否在 textFieldShouldBeginEditing 中返回 YES。 我查过了。它返回 YES 但第一次点击后没有任何反应。 奇怪,因为如果在第一次点击后调用此方法 - 然后文本字段开始编辑。也许有人在执行第一次点击后刚开始编辑就结束了? 我刚才注意到第一个 textField 的 shouldEndEditing 在第二个 textField 的 shouldBeginEditing 之后调用。可以手动更改吗? 我不这么认为。如果您在特定单元格上调用 endEditing 而不是单元格委托中的整个表格视图,它应该可以工作。

以上是关于在同一 UITableView 的单元格中更改 UITextFields 之间的焦点的主要内容,如果未能解决你的问题,请参考以下文章