SwiftUI

SwiftUI 自定义Modifier

在SwiftUI中,可以自定义自己的Modifier。当很多 View 有共性的 Modifier ,如共同的background color,padding,font 等,此时可以通过自定义 Modifier 进行封装,避免重复。

那么如果自定义Modifier呢?

  • 新建一个结构体实现 ViewModifier 协议。
  • 实现 body(content:) 方法。
  • 然后将需要的 Modifier 修饰到 content 参数上。

定义Modifier的例子

struct ClearButton: ViewModifier {
    @Binding var text: String

    public func body(content: Content) -> some View {
        HStack {
            content
            Button(action: {
                self.text = ""
            }) {
                if self.text != "" {
                    Image(systemName: "multiply.circle.fill")
                        .foregroundColor(.secondary)
                }
            }
        }
    }
}

struct hiddenView: ViewModifier {

    @Binding var isHidden: Bool
    public func body(content: Content) -> some View {
        Group {
            if !isHidden {
                content.hidden()
            } else {
                content
            }
        }
    }
}

使用Modifier的例子

TextField("", text: self.$inputText).keyboardType(.asciiCapable).textFieldStyle(RoundedBorderTextFieldStyle()).modifier(ClearButton(text: self.$inputText))