gpt4 book ai didi

objective-c - NSTableView 的嵌套 NSNotification

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

我有两个 TableView 控制对象集合的显示/排序(即按类别和本地化,即 Lieu)。我的问题是:我希望当用户单击任何 TableView 内的单元格时更新选择(使用 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];
}
}

最佳答案

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

关于objective-c - NSTableView 的嵌套 NSNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18962949/

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