我目前有一个表格视图,其中包含 NSTextFields 的单元格视图。目前,在行选择时,我正在向单元格视图发送以下消息,希望在单元格视图第一响应者状态中授予 NSTextView:
- (void)notifyOfSelectionInWindow:(NSWindow *)window {
[[self textField] setEditable:YES];
[[self textField] setSelectable:YES];
// make textField (textView) first responder
[[self textField] selectText:nil];
[[[self textField] currentEditor] setSelectedRange:NSMakeRange([[[self textField] stringValue] length], 0)];
}
因为我不希望 NSTextFields 在未选择它们所在的行时可编辑,所以我也在我的自定义 NSTextField 子类中执行此操作:
- (void)textDidEndEditing:(NSNotification *)notification {
[self setEditable:NO];
[self setSelectable:NO];
[super textDidEndEditing:notification];
}
选择更新代码:(请注意,我也在此处更改行高)
- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row {
// get the table veiw to animate/recalculate height of row
NSMutableIndexSet *changedRows = [NSMutableIndexSet indexSet];
[changedRows addIndex:row];
[changedRows addIndex:[tableView selectedRow]];
[tableView noteHeightOfRowsWithIndexesChanged:changedRows];
[rowView notifyOfSelectionInWindow:[self window]];
// ^ this in turn calls a method of the same name of the corresponding cell view
return YES;
}
问题是,这只有一半的时间有效。我第一次尝试选择一行时,第一响应者状态返回到表视图。第二次,它完美地工作,并且文本字段具有焦点。第三次,又断了。第四——完美!出于某种奇怪的原因,该代码每隔一段时间才有效......
有人知道为什么会这样吗?非常感谢任何有启发性的反馈。