SettingsLink 是 SwiftUI 在 macOS 上用來開啟 Settings scene 的原生 View 元件。
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 會像這樣:
實作客製的 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 的底色:
關於 XcodeProject
XcodeProject 創立於 2023,致力於協助開發者探索 Apple 的創新世界,學習在 iOS、iPadOS、macOS、tvOS、visionOS 與 watchOS 上開發 App,發現眾多技術與框架,讓開發者獲得更多能力。