gpt4 book ai didi

objective-c - 如何-editColumn :row:withEvent:select: with NSView-based table view using core data

转载 作者:行者123 更新时间:2023-12-03 17:51:38 24 4
gpt4 key购买 nike

我正在阅读《Cocoa 编程》第四版。第9章挑战。我无法启动 editColumn:row:withEvent:select 。调用其他 tableView 实例方法有效。此方法位于 tableViewController 中,而不是 myDocumentController 中。如果此方法位于 myDocumentController 中,它将起作用。我不喜欢将其添加到 myDocumentController 的是让它工作所需的额外代码。

方法 editColumn:row:withEvent:select 得到处理,因为 TableView 滚动到该行。该方法的其余部分不起作用。

文档说:../此方法尝试使指定列和行处的 View 成为第一响应者,如果 View 支持编辑,则该 View 将开始编辑。/..

首先如何制作NSTableCellView第一响应者?那么如何确保 NSTableCellView 是可编辑的呢?

我看到的是对[[tableView window] setInitialFirstResponder:[tableView self]];的引用和 [[tableView 窗口] makeFirstResponder:[tableView self]];。这些不会使单元格的对象成为第一响应者。

BOOL editingEnded = [[tableView window] makeFirstResponder:[tableView self]];

if (editingEnded)
{
NSLog(@"End current edits sucessfull.");
}
else if(!editingEnded) {
NSLog(@"Unable to end editing.");
return;
}


// Select a row. There is no logic here yet.
NSUInteger row = 10;
[tableView editColumn:0
row:row // Row is scrolled into view but stays disabled.
withEvent:nil
select:YES];

最佳答案

表格单元格 View 使用哪种 View ?对于基于 View 的表格,-editColumn:row:withEvent:select: 尝试将单元格 View 设置为第一响应者。如果单元格 View 不接受第一响应者,那么它就不起作用。

您可以使单元格 View 接受第一响应者,如果这对于它的 View 类型有意义的话。

或者,您可以选择该行,然后使用 -[NSWindow makeFirstResponder:] 使单元格 View 的 subview 之一成为第一响应者。对于文本字段或 TextView ,这将有效地启动编辑。如果单元格 View 是 NSTableCellView,那么您可能希望使其 textField 作为第一响应者。您可以使用 -[NSTableView viewAtColumn:row:makeIfNecessary:] 获取单元格 View 本身。

<小时/>

更新:

在下面的评论中,您将单元格 View 描述为“图像和文本表单元格 View ”,我认为它意味着IB中该名称的 View 集:带有NSTableCellView >NSTextFieldNSImageView 连接到其导出的 subview 。由于您的单元格 View (NSTableCellView)本身不可编辑,因此您不能使用--editColumn:row:withEvent:select:。相反,您必须将其 subview 之一(在本例中为文本字段)设置为第一响应者。你必须明确地这样做。因此,您需要使用我在 7 月 31 日的评论中放置的代码:

[window makeFirstResponder:[[tableView viewAtColumn:0 row:row makeIfNecessary:NO] textField]];

即获得cell View ;从中您获得文本字段;然后您要求窗口将该文本字段设置为第一响应者。

鉴于您还希望选择该行,因此需要单独执行此操作:

[tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];

如果窗口本身可能不是关键窗口,那么您需要将其设为关键窗口:

[window makeKeyAndOrderFront:nil];

关于objective-c - 如何-editColumn :row:withEvent:select: with NSView-based table view using core data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25004829/

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