You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:45:03