NSCollectionView インスタンスの「selectionIndexes」を次のように観察しています。
[self.collectionView addObserver:self forKeyPath:@"selectionIndexes" options:0 context:nil];
次に、observeValueForKeyPath: の変更に対応しています。
if(object == self.collectionView)
{
if([keyPath isEqualToString:@"selectionIndexes"])
NSLog(@"selectionIndexes CHANGED");
}
アイテムをクリックすると、マウス ダウン イベントとマウス アップ イベントの 2 つの通知が表示されることに気付きました。どちらの場合も、selectionIndexes プロパティはアイテムのインデックスを返します。クリックをゆっくりとダウン-一時停止して、ログで 2 つの異なる発火を確認することもできます。
これは正常ではないようです。どうすればこれを停止できますか? NSCollectionItem がクリックされたときに通知を受けるより良い方法はありますか?
更新:observeValueForKeyPath の選択もクリアしていたため、2 回発生することがわかりました。
if(object == self.collectionView)
{
if([keyPath isEqualToString:@"selectionIndexes"])
{
NSLog(@"selectionIndexes CHANGED");
[self.collectionView setSelectionIndexes:nil];
}
}
何らかの理由で、NSCollectionView は、項目からのマウスアップ イベントで選択が nil に設定されていることを認識し、選択インデックスをリセットします。選択をゼロに戻す必要があるため、これをどのように回避したいのかまだわかりません。