到目前为止,我能够为视图编写自定义修饰符;然而,当我试图保持代码干燥时,我试图为文本字段添加一个自定义修饰符。视图修饰符可以很好地处理类似于以下的内容:
struct sampleModifier : ViewModifier {
var height: CGFloat? = 100
func body(content: Content) -> some View {
content
.frame(height: height)
.background(Color.white)
.border(Color.gray, width: 0.5)
.shadow(color: Color.black, radius: 15, x: 0, y: 10)
}
}
但是当我尝试使用font
之类的修饰符时,它显示了很多错误。我确实理解它们可能需要更具体,而不是符合TextFieldStyleModifier
,但我不知道如何使它工作。我尝试过这样做,但没有成功:
struct TitleModifier : TextFieldStyleModifier {
func body(content: TextFieldStyle) -> some View {
content
.font(.custom("Open Sans", size: 18))
.color(Color.green)
}
}
这显然会失败,并显示以下错误:
如果我单击Fix
建议,它会将此代码添加到我的代码中
TextFieldStyleModifier<<#Style: TextFieldStyle#>>
我不知道怎么用。
有什么建议吗?
6条答案
按热度按时间jc3wubiy1#
现在可以在ViewModifier中添加
.font()
和.foregroundColor()
修饰符到content
。但是,如果你想添加一些只能应用于特定视图的自定义修饰符,例如文本视图的.strikethrough()
修饰符,你可以将这些修饰符添加到扩展中。用量
Text("Hello").customText()
。busg9geu2#
TextField也是视图,因此您可以使用相同的方式创建修饰符:
另请注意,没有修饰符.color()。它是.foregroundColor()。
当您要将它套用至FormField时,只需执行下列动作:
xdnvmnnf3#
您可以创建自定义TextFieldStyle,这将仅应用于TextField,而不应用于视图容器上的其他视图
用法:
icomxhvb4#
在Xcode 11 beta 4中,
color(_:)
修饰符已被弃用。因此请改用foregroundColor(_:)
方法。cld4siwp5#
据我所知,使用Text扩展名要好得多。对于Text,一些修饰符非常特殊,返回的主体类型不是View,而是Text.You can find many here。
这意味着我们为ViewModifier定义了Content和Body的类型,不确定是否有更好的方法。
roqulrg36#
使用自定义字体:
在新文件中添加
enum
:导入SwiftUI
在新文件中添加扩展名:
用途: