首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我试图在swiftUI中为"textfield“创建自己的修饰符时,会出现一个错误

当我试图在swiftUI中为"textfield“创建自己的修饰符时,会出现一个错误
EN

Stack Overflow用户
提问于 2022-09-29 06:43:33
回答 2查看 35关注 0票数 0

我试图在swiftUI中为"textfield“创建自己的修饰符。我在扩展中创建了以下修饰符。

代码语言:javascript
复制
extension TextField{
    public func LoginInputStyle(_ flg:String = "1") -> TextField{
        
        if(flg == "1"){
            return self.font(.system(size: 16, design: .rounded))
                .frame(maxWidth: 300)
                .textFieldStyle(RoundedBorderTextFieldStyle()) as! TextField<Label>
        }
        return self.font(.system(size: 16, design: .rounded))
            .frame(maxWidth: 300)
            .textFieldStyle(RoundedBorderTextFieldStyle()) as! TextField<Label>
    }
}


struct NewLogin: View {
    @State public var mail:String = ""
    var body:some View{
       VStack(){
          TextField("input mailaddress",text: $mail).LoginInputStyle()
       }
    }
}

当我构建修饰符时,它会因以下错误而停止

无法将'SwiftUI.ModifiedContent>,SwiftUI._FlexFrameLayout>、SwiftUI.TextFieldStyleModifier>‘(0x7f9ea6833d48)类型的值转换为“SwiftUI.TextField”

我怎么才能解决这个问题?提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2022-09-29 06:59:41

要创建您自己的修饰符,请使用ViewModifier尝试这种方法

代码语言:javascript
复制
struct NewLogin: View {
    @State public var mail: String = ""
    
    var body: some View {
       VStack() {
          TextField("input mailaddress",text: $mail)
               .modifier(TextFieldModifier(flg: "2"))
       }
    }
    
}

struct TextFieldModifier: ViewModifier {
    var flg: String = "1"
    
    func body(content: Content) -> some View {
        if(flg == "1") {
            content
                .font(.system(size: 16, design: .rounded))
                .frame(maxWidth: 300)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .foregroundColor(.blue)
        } else {
            content
                .font(.system(size: 16, design: .rounded))
                .frame(maxWidth: 300)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .foregroundColor(.red)
        }
    }

}
票数 1
EN

Stack Overflow用户

发布于 2022-09-29 07:29:06

作为工作狗的答案的另一种选择,您可以扩展View来创建修饰符--它可以避免在代码中编写“修饰符”。

修饰语:

代码语言:javascript
复制
extension View {
    
    @ViewBuilder
    func loginInputStyle(_ flg: String = "1") -> some View {
        
        if flg == "1" {
            self
                .font(.system(size: 16, design: .rounded))
                .frame(maxWidth: 300)
                .textFieldStyle(RoundedBorderTextFieldStyle())
        } else {
            self
                .font(.system(size: 26, design: .rounded))
                .frame(maxWidth: 300)
                .textFieldStyle(RoundedBorderTextFieldStyle())
        }
    }
}

在调用视图中:

代码语言:javascript
复制
    @State public var mail:String = ""

    var body:some View{
       VStack {
           TextField("input mailaddress", text: $mail)
                .loginInputStyle()
           TextField("input mailaddress", text: $mail)
                .loginInputStyle("2")
       }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73891295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档