自定义的TextField SwiftUI

huangapple go评论66阅读模式
英文:

Custom TextField Swiftui

问题

如何创建一个像图中显示的那样的文本字段?带有那种颜色的背景和白色线?

TextField("Nome", text: $nome, axis: .vertical)
    .textFieldStyle(.roundedBorder)
    .background(.ultraThinMaterial)
    .padding().padding(.bottom, 20).padding(.top, 110).scaledToFill()
    .underline()

TextField("Cognome", text: $nome, axis: .vertical)
    .textFieldStyle(.roundedBorder)
    .background(.ultraThinMaterial)
    .padding().padding(.bottom, 20).padding(.top, 190).scaledToFill()
    .underline()

请注意,这段代码中有一些与样式和文本字段相关的内容,我已经将其翻译为中文。

英文:

How can I create a text field like the one shown in the figure? with background of that color and white line?

自定义的TextField SwiftUI

import SwiftUI

@available(iOS 16.0, *)
struct SecondView: View {
    @State var nome = ""
    @State var cognome = ""

    
    var body: some View {
        GeometryReader { geo in
            ZStack {
                Color(red: 57 / 255, green: 63 / 255, blue: 147 / 255)
                Text("Ora tocca ai tuoi dati")
                    .font(Font.custom("Rubik", size: 22)).foregroundColor(Color.white).font(Font.body.bold()).padding(.bottom, 300).font(Font.headline.weight(.light))

                Text("Per iniziare ad usare MyEntZo completa i campi qui sotto").multilineTextAlignment(.center)
                    .font(Font.custom("Rubik", size: 18)).foregroundColor(Color.white).font(Font.body.bold()).padding(.bottom, 80).font(Font.headline.weight(.light))

                TextField("Nome", text: $nome, axis: .vertical)
                    .textFieldStyle(.roundedBorder)
                    .background(.ultraThinMaterial)
                    .padding().padding(.bottom, 20).padding(.top, 110).scaledToFill()
                    .underline()

                TextField("Cognome", text: $nome, axis: .vertical)
                    .textFieldStyle(.roundedBorder)
                    .background(.ultraThinMaterial)
                    .padding().padding(.bottom, 20).padding(.top, 190).scaledToFill()
                    .underline()
                
            
                    Button(action: {
                        print("sign up bin tapped")
                    }){
                        Text("Continua")
                            .frame(minWidth: 0, maxWidth: .infinity)
                            .font(.system(size: 18))
                            .padding()
                            .foregroundColor(.white)
                            .overlay(
                                RoundedRectangle(cornerRadius: 25)
                                    .stroke(Color.green, lineWidth: 2)
                            )
                    }
                    .background(Color.green)
                    .cornerRadius(25).frame(width: geo.size.width - 50, height: 100)
                    .padding(.top, 300)
                }
            }
            .ignoresSafeArea()
        
    }
}

struct SecondView_Previews: PreviewProvider {
    static var previews: some View {
        SecondView()
    }
}

答案1

得分: 2

以下是您要翻译的内容:

您可以创建一个自定义文本字段,将普通的 `TextField` 包装在其中,并将 `@State` 作为 `@Binding` 传入,例如:

```swift
struct CustomTextField: View {
    
    let placeholder: String
    @Binding var text: String
    
    var body: some View {
        VStack {
            TextField(placeholder, text: $text)
                .padding(.bottom, 4)
                .foregroundColor(.white)
            Color.white
                .frame(height: 2)
        }
        .padding([.top, .bottom, .trailing])
        .background(.blue)
    }
}

您可以像这样使用它:

struct ContentView: View {
    
    @State private var nome: String = ""
    
    var body: some View {
        VStack {
            // 等等
            CustomTextField(placeholder: "Nome", text: $nome)
            // 等等
        }
    }
}

自定义的TextField SwiftUI


[1]: https://i.stack.imgur.com/7UCrlm.png
英文:

You can create a custom text field that wraps a regular TextField, passing in the @State as a @Binding, e.g.

struct CustomTextField: View {
    
    let placeholder: String
    @Binding var text: String
    
    var body: some View {
        VStack {
            TextField(placeholder, text: $text)
                .padding(.bottom, 4)
                .foregroundColor(.white)
            Color.white
                .frame(height: 2)
        }
        .padding([.top, .bottom, .trailing])
        .background(.blue)
    }
}

which you can use like:

struct ContentView: View {
    
    @State private var nome: String = ""
    
    var body: some View {
        VStack {
            // etc
            CustomTextField(placeholder: "Nome", text: $nome)
            // etc
        }
    }
}

自定义的TextField SwiftUI

答案2

得分: 0

struct SecondView: View {
    @State var nome = ""
    @State var cognome = ""
    
    var body: some View {
        GeometryReader { geo in
            ZStack {
                Color(red: 57 / 255, green: 63 / 255, blue: 147 / 255)
                VStack {
                    Spacer()
                    Text("Ora tocca ai tuoi dati")
                        .font(Font.custom("Rubik", size: 22))
                        .foregroundColor(.white)
                        .bold()
                        .padding()
                        .font(Font.headline.weight(.light))
                    Text("Per iniziare ad usare MyEntZo completa i campi qui sotto").multilineTextAlignment(.center)
                        .font(Font.custom("Rubik", size: 18)).foregroundColor(Color.white).font(Font.body.bold()).padding(.bottom, 80).font(Font.headline.weight(.light))
                    
                    TextField("Nome", text: $nome, prompt: Text("Nome").foregroundColor(.white.opacity(0.7)))
                        .foregroundColor(.white)
                        .padding(.horizontal)
                    Rectangle()
                        .foregroundColor(.white)
                        .background(.white)
                        .frame(maxWidth: .infinity, maxHeight: 2)
                        .padding(.horizontal)
                    TextField("Cognome", text: $cognome, prompt: Text("Cognome").foregroundColor(.white.opacity(0.7)))
                        .foregroundColor(.white)
                        .padding([.horizontal, .top])
                    Rectangle()
                        .foregroundColor(.white)
                        .background(.white)
                        .frame(maxWidth: .infinity, maxHeight: 2)
                        .padding(.horizontal)
                    
                    Button(action: {
                        print("sign up bin tapped")
                    }){
                        Text("Continua")
                            .frame(minWidth: 0, maxWidth: .infinity)
                            .font(.system(size: 18))
                            .padding()
                            .foregroundColor(.white)
                            .overlay(
                                RoundedRectangle(cornerRadius: 25)
                                    .stroke(Color.green, lineWidth: 2)
                            )
                    }
                    .background(Color.green)
                    .cornerRadius(25).frame(width: geo.size.width - 50, height: 100)
                    .padding(.top)
                    
                    Spacer()
                }
            }
                
        }
        .ignoresSafeArea()
        
    }
}
英文:
struct SecondView: View {
    @State var nome = ""
    @State var cognome = ""

    
    var body: some View {
        GeometryReader { geo in
            ZStack {
                Color(red: 57 / 255, green: 63 / 255, blue: 147 / 255)
                VStack {
                    Spacer()
                    Text("Ora tocca ai tuoi dati")
                        .font(Font.custom("Rubik", size: 22))
                        .foregroundColor(.white)
                        .bold()
                        .padding()
                        .font(Font.headline.weight(.light))
                    Text("Per iniziare ad usare MyEntZo completa i campi qui sotto").multilineTextAlignment(.center)
                        .font(Font.custom("Rubik", size: 18)).foregroundColor(Color.white).font(Font.body.bold()).padding(.bottom, 80).font(Font.headline.weight(.light))
                
                    TextField("Nome", text: $nome, prompt: Text("Nome").foregroundColor(.white.opacity(0.7)))
                        .foregroundColor(.white)
                        .padding(.horizontal)
                    Rectangle()
                        .foregroundColor(.white)
                        .background(.white)
                        .frame(maxWidth: .infinity, maxHeight: 2)
                        .padding(.horizontal)
                    TextField("Cognome", text: $cognome, prompt: Text("Cognome").foregroundColor(.white.opacity(0.7)))
                        .foregroundColor(.white)
                        .padding([.horizontal, .top])
                    Rectangle()
                        .foregroundColor(.white)
                        .background(.white)
                        .frame(maxWidth: .infinity, maxHeight: 2)
                        .padding(.horizontal)
                    
                    Button(action: {
                        print("sign up bin tapped")
                    }){
                        Text("Continua")
                            .frame(minWidth: 0, maxWidth: .infinity)
                            .font(.system(size: 18))
                            .padding()
                            .foregroundColor(.white)
                            .overlay(
                                RoundedRectangle(cornerRadius: 25)
                                    .stroke(Color.green, lineWidth: 2)
                            )
                    }
                    .background(Color.green)
                    .cornerRadius(25).frame(width: geo.size.width - 50, height: 100)
                    .padding(.top)
                    
                    Spacer()
                }
            }
                
        }
        .ignoresSafeArea()
        
    }
}

huangapple
  • 本文由 发表于 2023年1月9日 17:19:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/75055198.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定