0

我有一个UITableView包含 basicUITableViewCell的 basic。当我在表格中添加一个新单元格时,我想:

1)滚动到新行

2) 选择新 UITableViewCell 中的所有文本,使键盘可见,用户可以立即编辑单元格的文本。

下一次通过事件循环(在表视图上调用 -reloadData 之后)我这样做:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:wordIndex inSection:0];

[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:(UITableViewScrollPositionNone)];

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];  
[cell.textLabel becomeFirstResponder];
cell.highlighted = YES;

滚动正确,但未选择单元格中的文本。

4

2 回答 2

2

AUILabel不能成为第一响应者,因为它NOcanBecomeFirstResponder. 要给出已编辑标签的错觉,您可以尝试使用 aUITextField和 a borderStyleof UITextBorderStyleNone

注意becomeFirstResponder调用的时间,因为如果控件不是窗口的子视图,它就不能成为第一响应者。如果您滚动到离屏幕很远的行并becomeFirstResponder在将其添加为可见行之前立即尝试调用,则可能会发生这种情况。

于 2013-04-11T12:37:49.760 回答
1

与之前的答案一样,您可以创建 UITableViewCell 的自定义子项,在其上添加 UITextField。

@interface MyTableViewCell : UITableViewCell
@property(nonatomic, retain) IBOutlet UITextField *editableTextField;
@end

比您可以在控制器中捕获 didSelectRowAtIndexPath 并将其文本字段设置为第一响应者

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
MyTableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
[cell.editableTextField becomeFirstResponder];
}

UPD:作为 Not-in-wind-cell 故障的故障解决方法,如上答案所述,您必须在方法中调用 selectCellAtIndexPath

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
于 2013-04-11T13:33:34.690 回答