View元素上的事件侦听器



在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,我希望它能像Button一样提供onClickonHover事件。它应该是这样的:

MyCustomSwiftUIView()
.onHover { hovered in
// EVENT1: executed on hover event
}
.onClick {
// EVENT2: executed on hover event
}

问题:如何在自己的自定义元素MyCustomSwiftUIView上添加/实现这些事件?

附言:我是SwiftUI的新手,而且我的语言很糟糕。这是我无法独自学习的第一门语言,我正在努力学习与我所经历过的任何其他语言都截然不同的基本概念。第一次连谷歌都帮不了我(希望我不要太夸张(

与其尝试使用.onHover.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")
}
}
}

最新更新