1

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 に設定されていることを認識し、選択インデックスをリセットします。選択をゼロに戻す必要があるため、これをどのように回避したいのかまだわかりません。

4

1 に答える 1