【问题标题】:SwiftUI: How to apply modifiers only to specific elements?SwiftUI:如何仅将修饰符应用于特定元素?
【发布时间】:2023-04-06 03:04:01
【问题描述】:

所以我有这个非常简化的代码,我基本上有一个带有自定义修饰符的 HStack。

我的问题是,如何将修饰符保留在 HStack 上,但不要让修饰符应用于 HStack 内的按钮?

在这种情况下,我可以直接将修饰符应用于文本字段,但正如我所提到的,这是我的代码的一个非常简化的版本,所以我们假设修饰符必须在 HStack 上

这是代码

HStack{
    TextField("Enter a Froot", text: self.$searchTxt)
     
    Button(action: {print("Is cancelled")}){
        Text("Cancel")
    }                
}.modifier(TFModifier())

这是修饰符

struct TFModifier : ViewModifier {
    func body(content: Content) -> some View {
        content.padding()
            .background(Color("TesterColor"))
            .overlay(
                RoundedRectangle(cornerRadius: 20)
                    .stroke(Color.black.opacity(0.01), lineWidth: 4)
                    .shadow(color:  Color("TesterColor3"), radius: 6, x: 5, y: 5)
                    .clipShape(RoundedRectangle(cornerRadius: 20))
            )
    }
}

【问题讨论】:

  • 我将您的代码添加到项目中,它似乎按预期工作。 TFModifier 仅在 HStack 上。这里有什么问题?
  • 我不希望修饰符应用于按钮@nicksarno
  • 这能回答你的问题吗? How to apply shadow to interior views in SwiftUI?

标签: ios swiftui


【解决方案1】:

在您的情况下,ViewModifier 认为内容是整个 HStack,这实际上是您最近告诉 SwiftUI 将我的 HStack 作为内容并作为内容使用 TFModifier 修改它!在这种情况下,没有办法告诉 SwiftUI 将 Button 排除在计算之外!这是100%不可能的! SwiftUI 不像 TFModifier 那样关心你的命名,它只关心传入的内容!就像我说的那样,您将整个 HStack 作为内容提供! 最好想想你想在哪里敏锐地应用这个修改!

【讨论】:

  • 感谢您的回答,即使我使用自定义修饰符,我还能这样做吗?而且我不希望按钮有不同的修饰符,我希望它根本没有修饰符@swiftPunk
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2022-01-09
  • 2016-09-21
  • 2010-10-23
  • 2012-06-05
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多