我怎样才能继承NSArrayController的选择上添加文本字段:(How can I subc

2019-10-30 10:57发布

这很简单,我相信,但我仍然非常学习。

我具有连接到阵列控制器,以显示coredata对象一个NSTableView。 该表是不可编辑。 当选择了一个记录,我有保存价值精选一子视图设置为按照可见。

我试图让这个当我按下连接添加+按钮:我的阵列控制器上,一个新的条目将被制成,焦点将跳转到该项目的描述文本字段中的子视图,使用户可以immediatily开始打字,而无需子视图出现时,选择新的arrangedObject行,然后文本字段。

有任何想法吗?

我会后的截图,但我一直没用户在这里足够长的时间。

Answer 1:

大书呆子牧场的可可书(第4版)在第9章,而不是使用NSArrayController的的-add的这个例子:对于+按钮的方法,他们使用自定义的方法来创建对象,然后将其插入阵列,应对-progress编辑和撤消经理分组,最后选择需要编辑的字段。 下面是摘录:

- (IBAction)createEmployee:(id)sender
{
NSWindow *w = [tableView window];
// Try to end any editing that is taking place
BOOL editingEnded = [w makeFirstResponder:w];
if (!editingEnded) {
    NSLog(@"Unable to end editing");
    return; }
NSUndoManager *undo = [self undoManager];
// Has an edit occurred already in this event?
if ([undo groupingLevel] > 0) {
    // Close the last group
    [undo endUndoGrouping];
    // Open a new group
    [undo beginUndoGrouping];
}
// Create the object
Person *p = [employeeController newObject];
// Add it to the content array of ’employeeController’
[employeeController addObject:p];
// Re-sort (in case the user has sorted a column)
[employeeController rearrangeObjects];
// Get the sorted array
NSArray *a = [employeeController arrangedObjects];
// Find the object just added
NSUInteger row = [a indexOfObjectIdenticalTo:p];
NSLog(@"starting edit of %@ in row %lu", p, row);
// Begin the edit in the first column
[tableView editColumn:0
                  row:row
            withEvent:nil
               select:YES];
}

全面实施是https://github.com/preble/Cocoa4eSolutions 。



Answer 2:

是的,这很简单:

不要使用NSArrayController

当你不需要任何控制在全国各地是如何工作的类是只适合。 如果你需要控制,您应该创建自己的控制器对象,它是表视图的数据源和委托,并有一个NSFetchedResultsController访问核心数据。

我个人只用过NSArrayController作为原型。 一旦我开始越来越重视应用,我总是把它扔出去,并把自定义的书面控制在它的位置。



文章来源: How can I subclass NSArrayController to select a text field on add: