SwiftUI封装NSPathControl如何缩小路径尺寸并点击路径项打开Finder对应位置
修改后的完整封装代码
struct PathView: NSViewRepresentable { typealias NSViewType = NSPathControl var configuration = { (view: NSPathControl) in } // 协调者用于处理点击事件 class Coordinator: NSObject { @objc func pathItemClicked(_ sender: NSPathControl) { guard let clickedUrl = sender.clickedPathItem?.url else { return } // 在Finder中定位并选中对应路径 NSWorkspace.shared.selectFile(clickedUrl.path, inFileViewerRootedAtPath: clickedUrl.deletingLastPathComponent().path) } } func makeCoordinator() -> Coordinator { Coordinator() } func makeNSView(context: Context) -> NSPathControl { let pathControl = NSPathControl() // 绑定点击事件 pathControl.target = context.coordinator pathControl.action = #selector(Coordinator.pathItemClicked(_:)) return pathControl } func updateNSView(_ nsView: NSPathControl, context: Context) { configuration(nsView) } }
两个需求的实现说明
- 缩小路径显示尺寸
可以在调用时的configuration闭包里直接修改controlSize、font属性,也可以配合SwiftUI的frame修饰符限制高度:controlSize可选值为.mini/.small/.regular,越小的尺寸整体控件高度越低- 自定义
font可以调整路径文字的显示大小
- 点击路径项打开Finder
通过给NSPathControl设置target和action绑定协调者的点击方法,点击时获取当前点击的路径项对应的url,调用NSWorkspace的选中方法即可实现打开Finder定位对应路径的效果。
调用示例
PathView { view in view.url = URL(fileURLWithPath: "/Volumes/Users/myfolder", isDirectory: true) // 缩小尺寸配置 view.controlSize = .small view.font = NSFont.systemFont(ofSize: 11) } // 也可配合frame修饰符限制整体高度 .frame(height: 22)
内容的提问来源于stack exchange,提问作者mousebat
相关产品推荐
相关产品推荐

