我已经尝试了这个线程中的一些解决方案,但我遇到了麻烦。我的表格动态加载了来自 plist 的数据,因此我无法在情节提要中创建从一个单元格到另一个单元格的连接。我实现了一个名为 DSCell 的自定义 UITableViewCell 类,它在单元格的右侧有两个 DSTextField 对象。在最左侧的 DSTextField 上按 Enter 键时,它成功地将焦点转移到下一个字段。但是,当在右侧文本字段上按 Enter 时,它应该将焦点移动到下一个单元格中的文本字段(向下一行)。但事实并非如此。
单元格中的文本字段具有标签 2 和 3。
这是我的 cellForRowAtIndex 方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"PaperCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
NSString *text = [_paper objectAtIndex:indexPath.row];
UILabel *label = (UILabel *)[cell viewWithTag:1];
label.text = text;
// Set the "nextField" property of the second DSTextfield in the previous cell to the first DSTextField
// in the current cell
if(indexPath.row > 0)
{
DSCell *lastcell = (DSCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row-1 inSection:indexPath.section]];
DSTextField *lastField = (DSTextField *)[lastcell viewWithTag:3];
DSTextField *currentField = (DSTextField *)[cell viewWithTag:2];
lastField.nextField = currentField;
}
return cell;
}
这是 textFieldShouldReturn 方法:
- (BOOL) textFieldShouldReturn:(UITextField *) textField {
DSTextField *field = (DSTextField *)textField;
UIResponder *responder = field;
[responder resignFirstResponder];
responder = field.nextField;
[responder becomeFirstResponder];
return YES;
}
目前,当调用 cellForRowAtIndexPath 时,我正在尝试将第二个 DSTextField 的 nextField 属性设置为当前单元格,但它似乎不起作用。我从第 1 行开始并尝试检索上一行中的单元格,然后将最右侧文本字段的 nextField 属性分配给当前单元格中最左侧的文本字段。
有一个更好的方法吗?我不想为每个文本字段使用不同的标签并这样做,这可能会变得混乱。