gpt4 book ai didi

objective-c - 如何识别 NSTableView 中具有特定索引的行对象?

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

我在 InterfaceBuilder 中使用 NSArrayController 来管理 NSTableView 中显示的对象。当我选择一行或多行时,将调用以下代码来删除对象并更新选择。

NSIndexSet* selectedRowIndices = [m_tableView selectedRowIndexes];
if (!selectedRowIndices || selectedRowIndices.count < 1) {
return;
}
[self removeObjectsAtIndices:selectedRowIndices];

// -------------------------------------------------------
// SELECT ROW BELOW OR EQUAL TO THE LAST DELETED ROW.
// -------------------------------------------------------

// Retrieve the highest selection index (lowest row).
NSInteger highestSelectedRowIndex = NSNotFound;
for (NSUInteger index = selectedRowIndices.firstIndex; index < selectedRowIndices.count; ++index) {
if (index > highestSelectedRowIndex) {
highestSelectedRowIndex = index;
}
}
if (highestSelectedRowIndex != NSNotFound && highestSelectedRowIndex < [m_tableView numberOfRows]) {
// 1) Get the selected object for the highest selected index.
// TODO: Retrieve the object from m_tableView or m_arrayController somehow!?!
// 2) Update the table view selection.
//[self updateTableViewWithSelectedObjects:...];
}

但是,我不知道如何识别与前一个选择的最高索引匹配的对象。
为什么?我想将新选择移动到最后一个选择下方的行。

<小时/>

注意:以上代码包含多个错误!

这就是我最终得到的结果 - 感谢 Thomas 的澄清。

NSUInteger nextSelectedRowIndex = selectedRowIndices.firstIndex;
if (nextSelectedRowIndex != NSNotFound) {
if (nextSelectedRowIndex >= m_tableView.numberOfRows) {
nextSelectedRowIndex = m_tableView.numberOfRows - 1;
}
id nextSelection = [[m_arrayController arrangedObjects] objectAtIndex:nextSelectedRowIndex];
[self updateTableViewWithSelectedObjects:nextSelection]];
}

最佳答案

NSIndexSet 中的索引是按顺序排列的。无需循环即可找到最高值。

如果您想选择给定的行,只需使用您想要建立的新选择调用 -selectRowIndexes:byExtendingSelection: 即可。例如,[m_tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:highestSelectedRowIndex] byExtendingSelection:NO]。您不需要知道那是哪个对象。

如果您仍然想了解该对象,则必须获取数组 Controller 的 arrangedObjects 并对其应用 -objectAtIndex:

关于objective-c - 如何识别 NSTableView 中具有特定索引的行对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209188/

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