【问题标题】:How to click a button programmatically in SwiftUI如何在 SwiftUI 中以编程方式单击按钮
【发布时间】:2021-05-31 14:58:15
【问题描述】:

在使用情节提要时,我们可以通过使用以编程方式单击按钮或字段

@IBOutlet weak var negativeButton: UIButton!
negativeButton.sendActions(for: .touchUpInside)

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

【问题讨论】:

    标签: swift xcode swiftui storyboard


    【解决方案1】:

    您不能将 SwiftUI 按钮视为 UIKit 按钮。因为在 SwiftUI 视图(按钮)中没有你在情节提要中所做的对象/插座,所以它没有这样的功能。

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

    请参考以下示例以获得更清晰的理解。

    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")
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      在 SwiftUI 中不可能做到这一点,SwiftUI 甚至不知道 Button 存在 “作为对象!但是作为渲染和它的职责存在”,为什么使用 Button 是它在 SwiftUI 中的功能,这意味着触发 Action()-> Void,所以 您也不需要 您不能以编程方式点击按钮,因为您可以随时随地运行它。

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

      import SwiftUI
      
      struct ContentView: View {
          var body: some View {
      
              Button("tap") {
                  
                  actionOfButton()
                  
              }
      
          }
          
          func actionOfButton() {
              
              print("Hello, world!")
              
          }
          
      }
      

      【讨论】:

        【解决方案3】:

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

        这里是演示。

        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")
                })
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-23
          • 2013-10-09
          • 1970-01-01
          • 2015-02-20
          • 2010-10-18
          • 2017-06-17
          相关资源
          最近更新 更多