- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能只是缺乏 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
进行编辑,它现在看起来像这样:
我的问题是:如何以编程方式第一次获得相同的状态(焦点、选定、突出显示),以使用户体验更好?
最佳答案
这样的东西对我有用:
- (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/
有没有一种方法可以“标记”对象的属性,使它们在反射中“突出”? 例如: class A { int aa, b; string s1, s2; public int AA
我是一名优秀的程序员,十分优秀!