Swift 4:NSFilenamesPboardType 不可用。使用什么来代替 registerForDraggedTypes

swift

1个回答

写回答

12395871

2025-09-10 15:20

+ 关注

Swift
Swift

Swift 4:使用哪个方法代替 registerForDraggedTypes?

Swift 4 中,registerForDraggedTypes 方法已经废弃,并且不再可用。这个方法是用于在 macOS 应用程序中实现拖放功能时,注册接受拖放操作的类型。那么在 Swift 4 中,我们应该使用什么方法来代替呢?

在替代 registerForDraggedTypes 方法的具体实现之前,让我们先了解一下什么是拖放功能以及为什么要用到 registerForDraggedTypes 方法。

拖放功能是指用户在界面上拖动某个元素,将其释放到另一个位置的操作。在 macOS 应用程序中,我们可以实现对拖动操作和释放操作的监听,从而实现拖放功能。当用户开始拖动某个元素时,我们可以将被拖动的元素的相关信息放入一个 pasteboard 中,然后在释放操作发生时,我们可以从 pasteboard 中获取到被拖动元素的信息。

在之前的版本中,我们可以使用 registerForDraggedTypes 方法来注册接受拖放操作的类型。这个方法接受一个数组参数,数组中包含了我们要接受的拖放类型。但是在 Swift 4 中,registerForDraggedTypes 方法已经被废弃,我们需要使用一种新的方法来替代它。

使用 NSView 的 registerForDraggedTypes 方法

Swift 4 中,我们可以使用 NSView 的 registerForDraggedTypes 方法来注册接受拖放操作的类型。这个方法接受一个数组参数,数组中包含了我们要接受的拖放类型,和之前的 registerForDraggedTypes 方法类似。

下面是一个简单的示例代码,演示了如何使用 NSView 的 registerForDraggedTypes 方法来实现拖放功能:

import Cocoa

class MyView: NSView, NSDraggingSource, NSPasteboardItemDataProvider {

override init(frame frameRect: NSRect) {

super.init(frame: frameRect)

registerForDraggedTypes([NSPasteboard.PasteboardType.URL])

}

required init?(coder: NSCoder) {

super.init(coder: coder)

registerForDraggedTypes([NSPasteboard.PasteboardType.URL])

}

override func draggingSession(_ session: NSDraggingSession, sourceOperationMaskFor context: NSDraggingContext) -> NSDragOperation {

return .copy

}

override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {

return .copy

}

override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {

let pasteboard = sender.draggingPasteboard()

if let items = pasteboard.pasteboardItems {

for item in items {

if let urlString = item.string(forType: NSPasteboard.PasteboardType.URL) {

// 处理拖放操作中的 URL

print("Dropped URL: \(urlString)")

}

}

}

return true

}

}

在上面的示例代码中,我们定义了一个名为 MyView 的自定义 NSView 子类。在初始化方法中,我们使用 registerForDraggedTypes 方法来注册接受 URL 类型的拖放操作。然后,我们实现了一些相关的拖放操作方法,如 draggingSession,draggingEntered 和 performDragOperation。

在 performDragOperation 方法中,我们首先获取到拖放操作中的 pasteboard,并从中获取到拖动的 URL 信息。然后我们可以对这个 URL 进行处理,或者进行一些其他的操作。

通过以上的方式,我们可以在 Swift 4 中实现拖放功能,并且不再使用废弃的 registerForDraggedTypes 方法。这个新的方法更加符合 Swift 4 的语法和规范,并且能够更好地与其他的 API 进行集成。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号