gpt4 book ai didi

objective-c - 在 NSTableView 中选择和编辑一个新对象

转载 作者:搜寻专家 更新时间:2023-10-30 20:10:41 35 4
gpt4 key购买 nike

我正在尝试选择和编辑新添加对象的名称属性。

在 OSX 上,我有一个数组 Controller ,它在表格 View 中显示其内容。我通过 AC 的属性连接(使用绑定(bind))表列的值。此外,我将 TableView 的内容和 selectionIndexes 绑定(bind)设置为指向 AC。

我的子类 AC 有一个 TableView (称为 tableView)的 IBOutlet,并包含来自数据模型的托管对象。

在我的 AC 中,我覆盖了 add: 方法。

- (void)add:(id)sender {
[super add:sender];
[[self managedObjectContext] processPendingChanges]; // no effect
[tableView reloadData]; // no effect
[tableView scrollRowToVisible:[[self arrangedObjects] count]-1];
}

新添加的对象以选中状态出现在表格 View 中(我在IB中设置了AC来选择新插入的对象)。但是 TableView 向下滚动到倒数第二行,将新行放在可见 View 之外。

当我尝试这个时,

[tableView scrollRowToVisible:[tableView selectedRow]];

或者这个,

[tableView scrollRowToVisible:[self selectionIndex]];

情况变得更糟:selectionIndex 似乎没有正确更新。

- (void)add:(id)sender {
[super add:sender];
NSLog(@"selectionIndex = %lu", [self selectionIndex]);
NSLog(@"number of objects in AC = %lu", [[self arrangedObjects] count]);
}

记录 selectionIndex 表明它始终显示先前的选择索引。记录 AC 中对象的数量总是一个太少。

我是否过早地尝试操作 TableView ?有什么想法更适合重写吗?


关于编辑部分..

以下语句干扰了上面的 scrollRowToVisible: 方法,因为最后一个参数似乎也选择了行。

[tableView editColumn:0 row:0 withEvent:nil select:YES];

无论如何,指定字段(出于测试目的,表格的第一行)似乎只是瞬间进入编辑模式,但随后立即完成编辑。

如有任何帮助,我们将不胜感激。

最佳答案

我想到的一个解决方案:

- (void)rearrangeObjects {
[super rearrangeObjects];
[tableView editColumn:0 row:[self selectionIndex] withEvent:nil select:YES];
}

最后一个参数 select:YES 不会将表滚动到行,也不会选择行。以下行也滚动 TableView 。

[tableView editColumn:0 row:[self selectionIndex] withEvent:nil select:NO];

select:YES 选择文本字段中正在编辑的文本。

不过,我想知道我是否正确地处理了这件事。该解决方案要求每个阵列 Controller 都有一个到显示其数据的 TableView 的导出。这似乎是多余的,因为 TableView (及其列)已经绑定(bind)到 AC。

尝试实现 MVC 设计模式,难道不应该将编辑单元格的责任委托(delegate)给 TableView 吗?

关于objective-c - 在 NSTableView 中选择和编辑一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9666003/

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