在 SwiftUI 視圖中,我們可以有一個 Button 元素,該按鈕元素具有onHover事件以及在按鈕單擊時觸發的事件(稱為action),如下所示:
Button("MyButton1", action: {
// EVENT1: executed on button click
})
.onHover { hovered in
// EVENT2: executed on hover event
}
現在我有我自己的 UI 元素,我像這樣定義:
struct MyCustomSwiftUIView: View {
var body: some View {
HStack
{
Button("MyButton1", action: {
// EVENT1: executed on button click
})
.onHover { hovered in
// EVENT2: executed on hover event
}
}
}
}
現在我已經MyCustomSwiftUIView定義了,我希望它提供onClick和onHover事件,就像 Button 一樣。它應該是這樣的:
MyCustomSwiftUIView()
.onHover { hovered in
// EVENT1: executed on hover event
}
.onClick {
// EVENT2: executed on hover event
}
問題:如何在我自己的定制元素上添加/實作這些事件MyCustomSwiftUIView?
PS:我是 SwiftUI 的新手,恕我直言,語言非常混亂。這是我無法自己學習的第一種語言,我正在努力解決與我所經歷過的任何其他語言都大不相同的基本概念。這是第一次連 Google 都無法幫助我(希望我不要太戲劇化)。
uj5u.com熱心網友回復:
我建議您將閉包作為引數傳遞,而不是嘗試使用像.onHoverand這樣的修飾符.onClick。看起來像這樣:
struct ContentView : View {
var body: some View {
MyCustomSwiftUIView(
onClick: {
//click
}, onHover: { hovered in
//hover
}
)
}
}
struct MyCustomSwiftUIView: View {
var onClick : () -> Void
var onHover : (Bool) -> Void
var body: some View {
HStack {
Button("MyButton1", action: onClick)
.onHover(perform: onHover)
}
}
}
另一個帶有內置 SwiftUI 修飾符的示例:
struct ContentView : View {
var body: some View {
MyCustomSwiftUIView()
.onTapGesture {
//click
}
.onHover { hovered in
//hover
}
}
}
struct MyCustomSwiftUIView: View {
var body: some View {
HStack {
Text("My custom view")
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382406.html
