我正在开发 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:
。