私には習慣がありますNSView
(それは多くの習慣の1つであり、それらはすべて内部に住んでNSCollectionView
います—それは関係ないと思いますが、誰にもわかりません)。ビューをクリックすると、選択状態が変更されます (それに応じて再描画されます)。ビューをダブルクリックすると、ダブルクリックしたオブジェクトの大きなプレビュー ウィンドウがポップアップ表示されるようにします。
私の最初は次のように見えました:
- (void)mouseUp: (NSEvent *)theEvent {
if ([theEvent clickCount] == 1) [model setIsSelected: ![model isSelected]];
else if ([theEvent clickCount] == 2) if ([model hasBeenDownloaded]) [mainWindowController showPreviewWindowForPicture:model];
}
これはほとんどうまくいきました。ただし、ビューをダブルクリックすると、選択状態が変わり、ウィンドウがポップアップします。これはまさに私が望むものではありません。
2つのオプションがあるようです。NSTimer
ダブルクリックに応答するときに選択状態を元に戻す (誤ったシングルクリックを元に戻す) か、シングル クリックに応答する前に遅延を組み込む何らかの解決策を練ることができます。つまり、選択状態を変更する前に、2 回目のクリックが行われないことを確認できます。
これはよりエレガントに思えたので、私が最初に取ったアプローチでした。私が Google から見つけた唯一の実際のガイダンスは、名前にハイフンが含まれる名前のないサイトに関するものでした。このアプローチは、ほとんどの場合、1 つの大きな注意点があります。
未解決の質問は、「どのくらいNSTimer
待つ必要がありますか?」です。名前のないサイトでは、Carbon 関数の使用が提案されていますGetDblTime()
。64 ビット アプリでは使用できないことを除けば、私が見つけた唯一のドキュメントには、クロック ティックを返すと書かれています。そして、それらを秒に変換する方法がわかりませんNSTimer
。
では、ここでの「正しい」答えは何ですか? GetDblTime()
?をいじります。ダブルクリックで選択を「元に戻す」? ココアの慣用的なアプローチがわかりません。