我有两个表视图控制对象集合的显示/排序(即,按类别和本地化,即Lieu)。 我的问题是:当用户点击任何这些表视图中的单元格(使用NSTableViewDelegate工作正常)时,我希望更新选择,但我还想将选择恢复到另一个表中的默认值图。
我的问题很明显:每次调用tableViewSelectionDidChange都会触发对自己的另一次调用,这会使结果安静不稳定。有没有办法阻止此调用[tableViewCategory selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
触发通知?
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
if ([[[aNotification object]identifier]isEqualToString:@"table2"]){
//First, reset AnnonceWithCategory
[tableViewCategory selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
//Then
[self showAnnoncesWithLieu];
}
else if ([[[aNotification object]identifier]isEqualToString:@"table3"]){
//First, reset AnnonceWithLieu
[tableViewLieu selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
[self showAnnoncesWithCategory];
}
}
答案 0 :(得分:1)
您无法阻止NSTableView
发送通知,但您可以阻止您的课程对其进行回复。你可以这样做:
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
if ([[[aNotification object]identifier]isEqualToString:@"table2"] && ! _currentlyUpdatingTable2){
//First, reset AnnonceWithCategory
_currentlyUpdatingTable2 = YES;
[tableViewCategory selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
_currentlyUpdatingTable2 = NO;
//Then
[self showAnnoncesWithLieu];
}
else if ([[[aNotification object]identifier]isEqualToString:@"table3"] && ! _currentlyUpdatingTable3){
//First, reset AnnonceWithLieu
_currentlyUpdatingTable3 = YES;
[tableViewLieu selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
_currentlyUpdatingTable3 = NO;
[self showAnnoncesWithCategory];
}
}
...其中_currentlyUpdatingTable2
和_currentlyUpdatingTable3
是接收通知的对象的ivars。