02:SwiftUI-TextField

 

 

正文

import SwiftUI

struct TextFieldPage : View {
    
    /** @State   属性包装器 数据(state)来驱动UI
     1: 监听
     2:重绘body
     
     SwiftUI 管理你声明为状态的任何财产的存储。 当状态值改变时,视图会使它的外观失效并重绘制 body。使用状态作为给定视图的唯一真实来源。
     State 实例不是值本身;它是一种读取和改变 value 的方法。要访问状态的基础值,请使用其 value 属性。
     因此,当你初始化一个标记为 的属性时@State,你实际上并不是在创建自己的变量,而是提示在后台SwiftUI创建“某物”来存储你设置的内容并从现在开始监视它!你@State var只是充当访问此包装器的委托。

     每次写入@State变量时,都会知道它正在监视它。它还将知道变量是否是从's 中读取的。
     使用此信息,它将能够在更改此变量后重新计算在其中引用了该变量的任何内容。
     SwiftUI @State View body View @State body
     */
    @State var name: String = ""
    @State var password: String = ""
    
    let nameText = Text("请填入昵称").foregroundColor(.gray).font(.system(size: 16))
    let pwdText = Text("请填入密码").foregroundColor(.gray).font(.bold(.system(size: 16))())
    
    var body: some View {
        VStack(spacing: 15) {
            HStack {
                Text("昵称:")
                    .foregroundColor(.secondary)
                
                /**
                 使用$前缀可以访问到状态变量或其属性之一的绑定。
                 双向绑定
                 */
                TextField("name:placeHolder", text: $name, onEditingChanged: { (changed) in
                    print("onEditing: \(changed)")
                }, onCommit: {
                    print("userName: \(self.name)")
                    self.endEditing(true)
                })
            }.padding(10).frame(height: 50).textFieldStyle(RoundedBorderTextFieldStyle())
                .padding(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20))
            
            HStack {
                Text("密码:").foregroundColor(.secondary)
                SecureField("password:placeHolder", text: $password) {
                    print("Password: \(self.password)")
                    self.endEditing(true)
                }
            }.padding(10)
                .frame(height: 50)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20))
        }.offset(y: -150)
            .navigationBarTitle(Text("TextField"))

    }
    
    private func endEditing(_ force: Bool) {
        //        UIApplication.shared.keyWindow?.endEditing(force)
        MainApp.keyWindow?.endEditing(force)
    }
}

// https://stackoverflow.com/questions/56491386/how-to-hide-keyboard-when-using-swiftui


#if DEBUG
struct TextFieldPage_Previews : PreviewProvider {
    static var previews: some View {
        TextFieldPage()
    }
}
#endif

 

posted on 2023-03-19 18:18  风zk  阅读(49)  评论(0编辑  收藏  举报

导航