如何在 SwiftUI 中向 Viewmodifiers 添加闭包?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中向 Viewmodifiers 添加闭包?【英文标题】:How do I add closures to Viewmodifiers in SwiftUI? 【发布时间】:2020-09-27 17:53:46 【问题描述】:我正在使用 ClearButton ViewModifier here
.modifier(ClearButton(text: $someBinding))
但我想在清除文本字段后运行一个函数。喜欢这个或类似的
.modifier(ClearButton(text: $someBinding))
print("")
有可能吗?
【问题讨论】:
【参考方案1】:您可以像这样将函数作为参数传递:
struct ClearButton: ViewModifier
@Binding var text: String
var action: () -> Void = // pass the function here
public func body(content: Content) -> some View
ZStack(alignment: .trailing)
content
if !text.isEmpty
Button(action:
self.text = ""
action() // call the `action` here
)
Image(systemName: "delete.left")
.foregroundColor(Color(UIColor.opaqueSeparator))
.padding(.trailing, 8)
并将此修饰符应用于您的 TextField:
struct ContentView: View
@State private var text = ""
var body: some View
TextField("Some Text", text: $text)
.modifier(
ClearButton(text: $text)
print("TextField cleared")
)
请注意,如果您想跳过尾随闭包的标签,action
参数必须放在最后。
【讨论】:
我们可以选择这个吗? @Robert 当然,我更新了我的答案。您可以将
替换为默认行为。您也可以使用var action: (() -> Void)?
,但这需要稍后解开可选项。
谢谢@pawello2222 我试过这样但它不起作用。 .modifier(ClearText(text: $name, action: print("234") ))
@Robert 不知道你在做什么。你可能没有打电话给action()
。我用更详细的解决方案更新了我的答案。
我真的很抱歉。我没有采取行动。我添加了,效果很好。我感激不尽。以上是关于如何在 SwiftUI 中向 Viewmodifiers 添加闭包?的主要内容,如果未能解决你的问题,请参考以下文章
在 swiftUI 2 中向 MapKit 添加 MapMarker
在 SwiftUI 中向 TextField/SecureField 添加图像,向占位符文本添加填充
在 SwiftUI 中向 NavigationView 添加搜索栏
如何从 MKMapView didSelect 注释更新封装的 SwiftUI 视图