我正在开发Mac应用并处理NSTableView以显示播放列表。用户可以将歌曲添加到表格中(或从中删除)。它支持撤消/重做操作。
以下是我的代码部分:
// MyDocument.m
- (void)insertObject:(URSoundTrack *)object inSoundTracksAtIndex:(NSUInteger)index{
[[self.undoManager prepareWithInvocationTarget:self] removeObjectFromSoundTracksAtIndex:index];
[self.undoManager setActionName:@"Add sound track"];
[self.soundTracks insertObject:object atIndex:index];
}
- (void)removeObjectFromSoundTracksAtIndex:(NSUInteger)index{
URSoundTrack *soundTrack = [self.soundTracks objectAtIndex:index];
[[self.undoManager prepareWithInvocationTarget:self] insertObject:soundTrack inSoundTracksAtIndex:index];
[self.undoManager setActionName:@"Remove sound track"];
[self.soundTracks removeObjectAtIndex:index];
}
这两种方法对于撤销/重做是对抗的,并且它完美地工作。
但我想让表格视图在插入后选择刚刚添加的行。撤消删除或重做插入(插入对象)时,它也应该有效。
我尝试了一些方法,但他们没有用。我想知道如何让表格视图在插入后选择那些行(即使在撤消/重做以插入行时)?
====更新了====
在我的应用中,在一次操作中可能会插入多个对象,即使撤消或重做也是如此。我需要选择刚刚插入的所有行。我使用插入方法尝试了–selectRowIndexes:byExtendingSelection:
方法,但第一次调用的插入方法中只有一个选项可以使用。
我在–insertObject:inSoundTracksAtIndex:
方法中插入一些对象后,不知道如何进行多项选择。
答案 0 :(得分:0)
NSTableView为您提供了一个很好的选择行的API:
selectRowIndexes:byExtendingSelection:
您知道哪些行已插入,只需传递它们的索引集(“byExtendingSelection:
”参数为“NO
”,如果您想创建一个全新的选择)和一切都会很可爱。