1

我有两个表视图控制对象集合的显示/排序(即按类别和本地化,即 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];
    }
}
4

1 回答 1

2

您无法阻止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。

于 2013-09-23T15:23:54.940 回答