给 NSTextField 焦点-?
Posted
技术标签:
【中文标题】给 NSTextField 焦点-?【英文标题】:Give NSTextField focus -? 【发布时间】:2012-04-07 01:45:07 【问题描述】:我目前有一个表格视图,其中包含 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;
问题是,这只有 一半 的时间有效。我第一次尝试选择一行时,第一响应者状态返回到表视图。第二次,它完美地工作,并且文本字段具有焦点。第三次,又断了。第四——完美!出于某种奇怪的原因,该代码每隔一段时间才有效...
有人知道为什么会这样吗?非常感谢任何有启发性的反馈。
【问题讨论】:
【参考方案1】:当在 tableView 中从 textField 切换到 textField 时,会以意想不到的顺序调用事件(直到您考虑一下)。
这里的问题是你的委托方法被调用的顺序。
假设您要从 textField1 转到 textField2。
一旦 textField1 已经处于活动状态并且您单击 textField2,它们就会被这样调用:
textShouldBeginEditing (textField2)
textShouldEndEditing (textField1)
textDidEndEditing (textField1)
textDidBeginEditing (textField2)
因为textShouldBeginEditing
在textDidEndEditing
之前被调用(因为它需要确保它可以在放弃旧行之前选择行)你需要更新你的self.textField
改为textDidBeginEditing
。
【讨论】:
以上是关于给 NSTextField 焦点-?的主要内容,如果未能解决你的问题,请参考以下文章
NSManagedObjectContext 保存导致 NSTextField 失去焦点
按 Tab 时 NSTextField 没有注意到失去焦点?