SwiftUI

2024 年 1 月 28 日

SwiftUI 在 macOS 開啟設定的 SettingsLink

已複製到剪貼板


SettingsLink 是 SwiftUI 在 macOS 上用來開啟 Settings scene 的原生 View 元件。

SwiftUI 和 macOS
SwiftUI 和 macOS

SwiftUI SettingsLink 概覽

在 macOS 上,當 SettingsLink 被點擊時,可能會有兩種行為:如果 App 的設定還沒被開啟的話,就會打開設定視窗,而如果設定已經被開啟的話,則會將設定視窗移至最前。

SettingsLink 與 Button 的比較

SettingsLink 用起來就像 Button,只是更為簡單,因為 Button 會需要實作被點擊了之後要做什麼,但 SettingsLink 只做一件事,就是開啟設定視窗,而這件事 SwiftUI 已經幫我們做好了。所以共同之處就是我們可以自己實作 View 的樣子。

注意

這裡假定 macOS app 已經有實作了 Settings Scene,所以 SettingsLink 絕對有視窗可以開啟,但其實就算沒實作 Settings Scene,macOS app 也不會閃退。而如果想了解如何用 SwiftUI 在 macOS 上實作設定視窗的話,可以點擊這裡

實作 SettingsLink

使用 SwiftUI 預設的 SettingsLink 畫面

SettingsLink 最簡單的使用方式,可以連畫面都不用實作,這時 SwiftUI 會用預設的畫面幫我們建出 SettingsLink,程式會像這樣:

struct ContentView: View {
    var body: some View {
        SettingsLink() // 直接 init 出來什麼都不用寫
    }
}

而預設的 SettingsLink 會像這樣:

SwiftUI 預設的 SettingsLink 畫面
SwiftUI 預設的 SettingsLink 畫面

實作客製的 SettingsLink 畫面

除了使用 SwiftUI 預設的 SettingsLink 畫面,我們也能自己實作。在 Xcode 寫程式如果用選的話,選可以吃一個 View 的 init,程式碼會像這樣:

struct ContentView: View {
    var body: some View {
        SettingsLink(label: {
            Text("Settings")
        })
    }
}

但因為這個 label closure 剛好在參數的最後一個(也是唯一的一個),所以我們可以在簡化這裡的程式,並順便實作客製的 SettingsLink 畫面:

struct ContentView: View {
    var body: some View {
        SettingsLink {
            Image(systemName: "gearshape.fill")
                .resizable() // 可縮放
                .scaledToFit() // 等比例填滿
                .frame(width: 25, height: 25)
                .padding(12) // 加一點間距
        }
        .clipShape(.circle) // 切成圓形
        .background(Materal.regular) // Materal 底色
    }
}

這裡用系統的齒輪圖片,並將 SettingsLink 改成圓形,然後配上 Materal 的底色:

客製 SwiftUI 的 SettingsLink 畫面
客製 SwiftUI 的 SettingsLink 畫面

分享文章

已複製到剪貼板

主題文章

查看 SwiftUI

超級感謝

關於 XcodeProject

XcodeProject 創立於 2023,致力於協助開發者探索 Apple 的創新世界,學習在 iOS、iPadOS、macOS、tvOS、visionOS 與 watchOS 上開發 App,發現眾多技術與框架,讓開發者獲得更多能力。


Contacts

Ricky Chuang

XcodeProject

RickyChuang.xcodeproj@gmail.com

XcodeProject 聯絡

contact.xcodeproj@gmail.com

最新文章