我们在swiftui中作为 UIButton(Sender: UIButton) 有啥? [关闭]

Posted

技术标签:

【中文标题】我们在swiftui中作为 UIButton(Sender: UIButton) 有啥? [关闭]【英文标题】:What do we have as UIButton(Sender: UIButton) in swiftui? [closed]我们在swiftui中作为 UIButton(Sender: UIButton) 有什么? [关闭] 【发布时间】:2021-06-04 06:02:52 【问题描述】:

在 UIKit 中,我通过代码捕获按钮发送者(点击了哪个按钮)

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

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

flagList.name 来自 struct,我想知道点击了哪个按钮,以便相应地调整 Flag 名称。

``` 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))

                
            


【问题讨论】:

【参考方案1】:

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

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

@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))
                    
                
            
        
    

【讨论】:

以上是关于我们在swiftui中作为 UIButton(Sender: UIButton) 有啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

什么控制事件开始和结束突出显示UIButton的状态

如何在 SwiftUI 中将模糊效果作为背景?

SwiftUI:WebView 不加载特定页面

在子视图中声明 uibutton

如何在 SwiftUI 视图中访问 UIView 子类的属性?

如何查看 SwiftUI 可以作为自定义字体提供的其他字体选项?