1

在 UIKit 我通过代码捕获按钮发送者(单击哪个按钮)

       let colorVC = UIColorPickerViewController()
       colorVC.delegate = self
       clickedButton = sender
       present(colorVC, animated: true)
   }

我想在 SwiftUI 中完成同样的事情。

flagList.name 来自结构,我想捕捉单击了哪个按钮,以便我可以相应地调整标志名称。

``` Button(action: {
            
            print("tapped")
        }, label: {
            List(flagList) { flagList in
             
                
                
                HStack(spacing: 15){
                Image(flagList.flagName)
                    .resizable()
                    .scaledToFit()
                    .clipShape(Circle())
                    .frame(width: 30, height: 30, alignment: .trailing)
                    
               
                    
                Text(flagList.name)
                    
                    .font(.system(size: 25, weight: .light, design: .default))

                }
            }


4

1 回答 1

0

首先,我认为您的按钮放错了位置。您可能想要一个按钮列表,而不是由列表组成的按钮。

然后,您可以存储一个表示当前选定按钮的属性:

@State var currentSelectedFlagName: String

注意我说的是代表,不是商店。在 SwiftUI 中,您不应该存储对单个视图(包括按钮)的引用。

然后,您可以currentSelectedFlagName在点击时设置为当前选定的标志名称。

struct ContentView: View {
    
    ...
    
    /// represents current selected button
    @State var currentSelectedFlagName: String
    
    var body: some View {
        List(flagList) { flagList in
            Button(action: {

                /// set the property
                currentSelectedFlagName = flagList.flagName
                print("tapped")
            }) {
                HStack(spacing: 15){
                    Image(flagList.flagName)
                        .resizable()
                        .scaledToFit()
                        .clipShape(Circle())
                        .frame(width: 30, height: 30, alignment: .trailing)
                    
                    Text(flagList.name)
                        .font(.system(size: 25, weight: .light, design: .default))
                    
                }
            }
        }
    }
}
于 2021-06-04T06:20:16.137 回答