SwiftUI +按钮的动态操作关闭

时间:2019-12-18 09:55:11

标签: swift button swiftui

我正在探索SwiftUI,并且能够创建Future<String> makeLoginRequest(String requestJson) async{ final uri = url; final headers = { 'Content-Type': 'application/json', "Accept": "application/json", }; var response=await post( uri, headers:headers, body: requestJson, ); print("${response.body}"); return response.toString(); } 的子类。

子类包含Buttonimage属性,这使其成为可重用的组件。

但是我无法为title类定义动态动作行为。

请参考下面的代码。

圆形按钮的子类:

Button

用法示例:

struct RoundButton: View {
    var image: String
    var title: String
    var body: some View {
        VStack {
            Button(action: {
                print("Button pressed")
            }){
                Image(image)                
                   .renderingMode(Image.TemplateRenderingMode?.init(Image.TemplateRenderingMode.template))
            }
            .frame(width: 40, height: 40)
            .background(Color.blue)
            .cornerRadius(20)
            .accentColor(.white)

            Text(title)
                .font(.footnote)
        }
    }
}

您将看到HStack(alignment: .center) { Spacer(minLength: 50) RoundButton(image: "chat", title: "message") Spacer() RoundButton(image: "call", title: "call") Spacer() RoundButton(image: "video", title: "video") Spacer() RoundButton(image: "mail", title: "mail") Spacer(minLength: 50) } 块在此处打印一条消息。

我想知道如何为按钮的动作事件传递函数?

1 个答案:

答案 0 :(得分:2)

按钮更新...

struct RoundButton: View {
    var image: String
    var title: String
    var action: () -> Void

    var body: some View {
        VStack {
            Button(action: action){
                Image(image)
                   .renderingMode(Image.TemplateRenderingMode?.init(Image.TemplateRenderingMode.template))
            }
    ...

用法更新...

RoundButton(image: "chat", title: "message") {
    print("Button pressed")
}