SwiftUI:自定义修饰符
- 2020 年 4 月 1 日
- 筆記
SwiftUI为我们提供了一系列内置修饰符,例如font()
,background()
和clipShape()
。但是,也可以创建自定义修饰符来执行特定的操作。
例如,我们可能会说应用程序中的所有标题都应具有特定的样式,因此首先我们需要创建一个自定义的ViewModifier
结构体,该结构体可以实现我们想要的功能:
struct Title: ViewModifier { func body(content: Content) -> some View { content .font(.largeTitle) .foregroundColor(.white) .padding() .background(Color.blue) .clipShape(RoundedRectangle(cornerRadius: 10)) } }
现在,我们可以将其与modify()
修饰符一起使用——是的,它是一个名为“modifier”的修饰符,但是它允许我们将任何种类的修饰符应用于视图,如下所示:
Text("Hello World") .modifier(Title())
使用自定义修饰符时,通常最好在View
上创建扩展程序,以使其易于使用。例如,我们可以将Title
修饰符包装在如下扩展中:
extension View { func titleStyle() -> some View { self.modifier(Title()) } }
我们现在可以像这样使用修饰符:
Text("Hello World") .titleStyle()
自定义修饰符不仅可以应用其他现有修饰符,还可以做更多的工作——它们还可以根据需要创建新的视图结构体。记住,修饰符会返回新对象,而不是修改现有对象,因此我们可以创建一个将视图嵌入堆栈并添加另一个视图的对象:
struct Watermark: ViewModifier { var text: String func body(content: Content) -> some View { ZStack(alignment: .bottomTrailing) { content Text(text) .font(.caption) .foregroundColor(.white) .padding(5) .background(Color.black) } } } extension View { func watermarked(with text: String) -> some View { self.modifier(Watermark(text: text)) } }
有了它,我们现在可以为任何视图添加水印,如下所示:
Color.blue .frame(width: 300, height: 200) .watermarked(with: "Hacking with Swift")
Previous: 视图拆分与组合 |
Hacking with iOS: SwiftUI Edition |
Next: 自定义容器 |
---|