gpt4 book ai didi

cocoa - 自动选择、聚焦并突出显示新的 NSOutlineView 行

转载 作者:行者123 更新时间:2023-12-03 18:02:25 27 4
gpt4 key购买 nike

这可能只是缺乏 NSOutlineView 的经验,但我看不出有什么方法可以做到这一点。我有一个 NSOutlineView (用优秀的 PXSourceList 实现),带有一个添加按钮,该按钮在我正确保存/写入/插入/删除行方面完全起作用。我不使用 NSTreeController,也不使用绑定(bind)。我使用以下代码添加实体:

- (void)addEntity:(NSNotification *)notification {
// Create the core data representation, and add it as a child to the parent node
UABaseNode *node = [[UAModelController defaultModelController] createBaseNode];
[sourceList reloadData];
for (int i = 0; i < [sourceList numberOfRows]; i++) {
if (node == [sourceList itemAtRow:i]) {
[sourceList selectRowIndexes:[NSIndexSet indexSetWithIndex:i] byExtendingSelection:NO];
[sourceList editColumn:0 row:i withEvent:nil select:NO];
break;
}
}
}

按下添加按钮时,将插入一个新行,如下所示:

enter image description here

如果我点击离开,然后选择该行并按 enter 进行编辑,它现在看起来像这样: enter image description here

我的问题是:如何以编程方式第一次获得相同的状态(焦点、选定、突出显示),以使用户体验更好?

最佳答案

这样的东西对我有用:

- (void)addEntity:(NSNotification *)notification {
// Create the core data representation, and add it as a child to the parent node
UABaseNode *node = [[UAModelController defaultModelController] createBaseNode];
[sourceList noteNumberOfRowsChanged];
NSInteger row = [sourceList rowForItem:node];
[sourceList scrollRowToVisible:row];
[sourceList selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
[sourceList editColumn:0 row:row withEvent:nil select:YES];
}

您可以使用rowForItem:而不是重复检查itemAtRow:

您通常还希望使用 [sourceList rollRowToVisible:...] 以防新行不可见,并且您可以使用 noteNumberOfRowsChanged 而不是 reloadData,除非数据实际上已更改。

标准的 Mac 行为是选择新创建的项目的内容,因此请使用 select:YES

如果这没有帮助,则说明您的代码中还发生了上述代码片段无法传达的其他内容...

一般来说,我真的建议在学习新类(class)时,您从头到尾阅读文档页面,其中列出了可用的方法(不推荐使用的方法除外),或者至少是可用于您的任务的所有方法。正在努力表现;您将更好地了解该类的功能,并且不太可能使用不适当/低效/不优雅的方法。

关于cocoa - 自动选择、聚焦并突出显示新的 NSOutlineView 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047438/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com