6

を含むポップアップ ステータス バー アプリケーションがありますNSTableView。行がテーブルの外にドラッグされると(ここではドラッグドロップが完全に機能しますが、これは質問の焦点では​​ありません)、カーソルをプーフィーポインターに変更します[NSCursor disappearingItemCursor]

- (void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint {
    if (self.draggedRowCanBeDeleted) {
        BOOL outside = !NSPointInRect(screenPoint, window.frame);
        if (outside) {
            [[NSCursor disappearingItemCursor] set];
        } else {
            [[NSCursor arrowCursor] set];
        }
    }
}

これは、機能する場合と機能しない場合があるという点で、かなり信頼できません。多くの場合、最初の試行では機能しますが、その後は機能しなくなります。何をドラッグしているか、またはドラッグがどれだけ移動するかなどのパターンを見つけることができないようです...、それはかなり不安定に見えます. ここで何か間違ったことをしていますか?そうでない場合、問題を診断するために私にできることはありますか?




更新/ルート
も試しましたが、問題は解決しません。pushpop

- (void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint {
    if (self.draggedRowCanBeDeleted) {
        BOOL outside = !NSPointInRect(screenPoint, window.frame);
        if (outside) {
            if (!_showingPoof) {
                _showingPoof = YES;
                [[NSCursor disappearingItemCursor] push];
            }
        } else {
            if (_showingPoof) {
                _showingPoof = NO;
                [[NSCursor disappearingItemCursor] pop];
                // I have also tried: [NSCursor pop];
            }
        }
    }
}




更新
メソッドを 使用して設定することも試しsourceOperationMaskForDraggingContextました。正しいセクションが正しいタイミングで呼び出されていることを確認できますが、このルートに移動してもカーソルは変化しません。

- (NSDragOperation)draggingSession:(NSDraggingSession *)session sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
    if (self.draggedRowCanBeDeleted) {
        switch(context) {
            case NSDraggingContextOutsideApplication:
                [[NSCursor disappearingItemCursor] set];
                return NSDragOperationDelete;
                break;

            case NSDraggingContextWithinApplication:
                [[NSCursor closedHandCursor] set];
                return NSDragOperationMove;

            default:
                [[NSCursor arrowCursor] set];
                return NSDragOperationNone;
        }
    }

    return NSDragOperationNone;
}
4

0 に答える 0