簡體   English   中英

如何在 SwiftUI 中以編程方式單擊按鈕

[英]How to click a button programmatically in SwiftUI

在使用 storyboard 時,我們可以通過使用以編程方式單擊按鈕或字段

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

如何使用 SwiftUI 重新創建相同的內容?

在 SwiftUI 中做同樣的事情是不可能的,SwiftUI 甚至不知道按鈕存在“作為對象!但是作為渲染並且它的職責存在” ,為什么使用按鈕是它在Z5D807DF8E2D0F60FCC3ZB5037功能)-> Void ,所以你不需要不能以編程方式點擊按鈕,因為你可以隨時隨地運行它的動作。

例如:您可以從您想要以編程方式點擊按鈕的位置運行actionOfButton() ,它的工作方式相同。 如果您的 Button 根據每次點擊改變它的外觀,您應該在actionOfButton()中發生,因此,您可以同時進行操作和渲染,這就是在 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")
        })
    }
}

在此處輸入圖像描述

您不能將 SwiftUI 按鈕視為 UIKit 按鈕。 因為在 SwiftUI 中,視圖(按鈕)沒有像在 storyboard 中那樣的對象/插座,所以它沒有這樣的 function。

相反,您可以創建 function 並且可以使用該 function 來觸發按鈕操作,並且您可以從任何需要的地方調用該 function。

請參考以下示例以獲得更清晰的理解。

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

}

要以編程方式測試 SwiftUI 按鈕,您可以使用包含 sendTouchSequence function 的隱藏 _ViewTest 協議。

本文最后解釋: https://betterprogramming.pub/behavioural-testing-of-swiftui-views-with-host-app-and-viewtest-f1343a281c5f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM