如何在 SwiftUI 中以编程方式单击按钮

How to click a button programmatically in SwiftUI

在使用情节提要时,我们可以使用

以编程方式单击按钮或字段
@IBOutlet weak var negativeButton: UIButton!
negativeButton.sendActions(for: .touchUpInside)

如何使用 SwiftUI 重新创建相同的内容?

在 SwiftUI 中做同样的事情是不可能的,SwiftUI 甚至不知道 Button 的存在“作为对象!但是作为 Render 和它的职责存在”,使用 Button 的原因是它在 SwiftUI 中的功能,这意味着启动 Action()-> Void,所以你不需要你不能编程点击按钮,因为你可以随时随地运行它的动作。

例如: 您可以 运行 actionOfButton() 从您想要的地方以编程方式点击按钮,它的工作原理是一样的。如果你的 Button 根据每次点击改变它的外观,你应该在 actionOfButton() 中发生,所以话虽如此,你可以同时进行操作和渲染,这就是以编程方式点击 Button 的总结在 SwiftUI 中。

import SwiftUI

struct ContentView: View {
    var body: some View {

        Button("tap") {
            
            actionOfButton()
            
        }

    }
    
    func actionOfButton() {
        
        print("Hello, world!")
        
    }
    
}

可能的解决方案是在您的结构视图中声明您的操作变量,并且您可以在需要时手动调用按钮操作。

这是演示。

struct ContentViewButtonAction: View {
    
    var buttonAction: ()->Void {
        {
            print("Button tapped!!")
        }
    }
    
    var body: some View {
        Button(action: buttonAction, label: {
            Text("Tap Button")
        })
        
        Button(action: {
            print("Second button tapped")
            buttonAction()
        }, label: {
            Text("Tap Button to execute first button action")
        })
    }
}

您不能像对待 UIKit 按钮那样对待 SwiftUI 按钮。因为在 SwiftUI 视图中(按钮)没有像您在故事板中那样的 object/outlet,所以它没有那样的功能。

相反,您可以创建函数并使用该函数来触发按钮操作,并且您可以从任何需要的地方调用该函数。

请参考下面的例子更清楚的理解。

struct ContentView: View {

    var body: some View {
        Button(action: {
            buttonAction()
        }, label: {
            Text("Tap Here")
        })
    }

    func buttonAction(){
        //do write here your button action logic
        print("button tapped")
    }

}