Closed2
アウトラインにおけるDrag&Drop UIのベストプラクティス
アウトラインでのDrag&Drop UI、insertAtとinsertIntoの両方のオペレーションを許可すると途端に操作ミスしやすくなるな。
よく標準Appを観察すると、Finderではそもそもソートして並ぶのでinsertAtはないし、XcodeではInsertIntoは実装可能なのにおそらく意図を持って実装していない。
(例外的にReminderでは両方実装されている)
Xcodeのデザインパターンが秀逸で、これだとある階層の中にノードを入れたい時に事前に開いてからじゃないと実行できないから不便じゃないのと思うけど、Spring Loadsで解決している。collaplsedなフォルダ直下でホールドすると、ちゃんとexpandしてくれる
ここから学ぶに「基本的にアウトラインでのDrag&Drop UIではinsertAtとinsertIntoのどちらか一方のみをサポートし、もう一歩踏み込んだUX(使い心地)の提供としてSpring Loadsの利用を検討する」という感じで捉えれば良いと思った。
右記のツイートの内容を転記: https://twitter.com/yosshi_4486/status/1661611318808559622
AppKitでそれを実現したい場合、NSOutlineViewDataSource. outlineView(_:validateDrop:proposedItem:proposedChildIndex:)で下記のようなガード節を先頭に入れると良い
guard index >= 0 else { return [] }
insertIntoに該当するケースではindexが-1
で渡されるので。
このスクラップは3ヶ月前にクローズされました