【问题标题】:How to get a sidebar open state in Swift?如何在 Swift 中获得侧边栏打开状态?
【发布时间】:2021-01-23 09:56:31
【问题描述】:

我有一个带有侧边栏的 SwiftUI 应用 (NavigationView) 我可以使用SidebarCommands() 通过热键和通过以下函数以编程方式切换侧边栏:

func toggleSidebar() {
  NSApp.keyWindow?.firstResponder?.tryToPerform(#selector(NSSplitViewController.toggleSidebar(_:)), with: nil)
}

我已将此附加到按钮操作,但我想在侧边栏打开时以不同颜色突出显示按钮。

如何获取侧边栏的状态?

【问题讨论】:

    标签: swift macos swiftui


    【解决方案1】:

    一半的解决方案:(原因是一半见底部)


    假设你有一个ToolbarItem:

    ToolbarItem {
        Button(
            action: toggleSidebar, 
            label: { Label("Sidebar", systemImage: "sidebar.left") }
        )
    }
    

    您可以在视图中添加Bool@State private var sidebarOpened: Bool = true

    然后您可以使用相同的按钮切换该值:

    ToolbarItem {
        Button(
            action: {
                toggleSidebar()
                sidebarOpened.toggle()
            }
            label: { Label("Sidebar", systemImage: "sidebar.left") }
        )
    }
    

    现在您可以根据sidebarOpened 设置标签的颜色:

    label: { Label("Sidebar", systemImage: "sidebar.left") }
    .foregroundColor(sidebarOpened ? .red : .secondary)
    

    注意:

    此方法并不真正知道侧边栏是否打开,而是根据按钮是否被单击来工作,因此如果您上次关闭应用程序时是否打开侧边栏,它会给您不同的结果.

    最好有侧边栏是否打开的值,我认为还没有原生的 SwfitUI 解决方案。可能需要检查AppKitNSSplitView

    【讨论】:

    • 是的,这个问题是无法判断应用程序是在侧边栏打开还是折叠时打开的。我浏览了文档,发现了一个叫做 NSSplitViewController.splitViews[index].isCollapsed 的东西,但我没有让它工作:(
    猜你喜欢
    • 1970-01-01
    • 2020-10-26
    • 2016-10-28
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多