SwiftUI-TextField组件学习

TextFieldSwiftUI 中用于获取用户输入的组件。它通常用于收集文本信息,比如用户名、密码或搜索查询。TextField 可以非常灵活地定制和样式化,支持多种功能,如占位符、输入限制、文本变化监听等。

基本用法

TextField 最基本的用法是绑定一个 String 类型的变量,该变量会自动更新文本框中的内容。

scss 复制代码
@State private var username: String = ""

var body: some View {
    TextField("Enter username", text: $username)
        .padding()
        .border(Color.gray, width: 1)
}
样式和修饰符
TextField 样式
  1. textFieldStyle() - 设置 TextField 的样式
  • TextFieldStyle 用来定义输入框的外观。
  • 常用的预定义样式:
    • DefaultTextFieldStyle:默认样式,没有特殊的外观变化。
    • RoundedBorderTextFieldStyle:带圆角的边框样式。
    • PlainTextFieldStyle:简单的无装饰样式。
less 复制代码
TextField("Enter your text", text: $username)
    .textFieldStyle(RoundedBorderTextFieldStyle())  // 使用圆角边框样式
常用修饰符
1.padding() - 设置内边距
  • TextField添加内边距。
php 复制代码
TextField("Enter your name", text: $name)
    .padding()
2.background() - 设置背景颜色或视图
  • TextField 设置背景颜色或视图。
scss 复制代码
TextField("Enter your email", text: $email)
    .padding()
    .background(Color.gray.opacity(0.1))
    .cornerRadius(5)
3.foregroundStyle() - 设置文本颜色
  • 设置TextField中的文本颜色。
php 复制代码
TextField("Enter text", text: $input)
    .foregroundStyle(.blue)
4.font() - 设置文本字体
  • 设置文本的字体样式。
php 复制代码
TextField("Enter text", text: $input)
    .font(.title)
5.frame() - 设置宽度、高度等
  • 设置TextField的尺寸。
php 复制代码
TextField("Enter your name", text: $name)
    .frame(width: 300, height: 50)
6.border() - 设置边框
  • TextField添加边框。
php 复制代码
TextField("Enter text", text: $input)
    .padding()
    .border(Color.gray, width: 1)
7.cornerRadius() - 设置圆角
  • 设置TextField的圆角。
scss 复制代码
TextField("Enter text", text: $input)
    .padding()
    .background(Color.blue)
    .foregroundColor(.white)
    .cornerRadius(10)
8.opacity() - 设置透明度
  • 控制TextField的透明度。
php 复制代码
TextField("Enter text", text: $input)
    .opacity(0.8)
9.disabled() - 禁用输入框
  • 禁用 TextField,使其不可编辑。
php 复制代码
TextField("Enter text", text: $input)
    .disabled(true)
10.lineLimit() - 限制行数
  • 设置文本框可以显示的最大行数。
arduino 复制代码
TextField("Enter multiline text", text: $text)
    .lineLimit(2)  // 限制文本框显示2行
11.multilineTextAlignment() - 设置多行文本对齐
  • 设置多行文本的对齐方式(如左对齐、居中等)。
arduino 复制代码
TextField("Enter multiline text", text: $text)
    .multilineTextAlignment(.center)  // 文本居中对齐
12.keyboardType() - 设置键盘类型
  • 设置TextField显示的键盘类型。
php 复制代码
TextField("Enter email", text: $email)
    .keyboardType(.emailAddress)  // 使用邮箱键盘
13.autocapitalization() - 设置自动大写
  • 控制TextField在输入时是否自动将首字母大写。
php 复制代码
TextField("Enter text", text: $input)
    .autocapitalization(.sentences)  // 自动将句首字母大写
14.autocorrectionDisabled() - 禁用自动纠错
  • 禁用自动拼写纠正功能。
php 复制代码
TextField("Enter text", text: $input)
    .autocorrectionDisabled(true)  // 禁用自动纠错
15.onChange(of:) - 监听文本变化
  • 监听文本框内容的变化,执行某个动作。
php 复制代码
TextField("Enter text", text: $input)
    .onChange(of: input) { newValue in
        print("Text changed: \(newValue)")
    }
16.onEditingChanged - 监听编辑状态
  • TextField 的编辑状态变化时执行某个动作。
php 复制代码
TextField("Enter text", text: $input, onEditingChanged: { isEditing in
    if isEditing {
        print("Started editing")
    } else {
        print("Finished editing")
    }
})
17.onCommit - 监听回车键事件
  • 当用户按下回车键时执行某个操作。
php 复制代码
TextField("Enter text", text: $input, onCommit: {
    print("Text committed")
})
18.submitLabel() - 设置提交按钮标签
  • 在键盘上显示自定义的"提交"按钮。
php 复制代码
TextField("Enter text", text: $input)
    .submitLabel(.done)  // 设置为"完成"按钮
19.accentColor()或者tint() - 设置光标颜色
  • 设置输入框的光标的颜色(accentColor在未来会被废弃,建议使用tint来设置光标的颜色)
css 复制代码
TextField("", text: $username)
                .padding(8)
                .background(Color.gray.opacity(0.1))
                .cornerRadius(5)
                .font(.system(size: 18, weight: .medium))
                .accentColor(.red)
TextField("Enter password",text: $password)
                    .padding()
                    .textFieldStyle(DefaultTextFieldStyle())  // 使用圆角边框样式
                    .tint(.red)                
占位符(Placeholder
  • 占位符用于指示 TextField 中应该输入的内容。它会在用户未输入时显示。当用户开始输入时,占位符会消失。
scss 复制代码
TextField("Enter your email", text: $email)
    .padding()
    .border(Color.gray)
安全输入框(SecureField
  • SecureField 用于输入密码等敏感信息,输入的内容会被隐藏。
scss 复制代码
@State private var password: String = ""

var body: some View {
    SecureField("Enter password", text: $password)
        .padding()
        .background(Color.gray.opacity(0.1))
        .cornerRadius(5)
}
自定义占位符的颜色和字体
scss 复制代码
ZStack(alignment: .leading) {
            if username.isEmpty {
                Text("Enter your name")
                    .foregroundColor(.gray)  // 设置占位符颜色
                    .font(.system(size: 18, weight: .medium))  // 设置占位符字体
                    .padding(.leading, 8)
            }
            
            TextField("", text: $username)
                .padding(8)
                .background(Color.gray.opacity(0.1))
                .cornerRadius(5)
                .font(.system(size: 18, weight: .medium))
        }
        .padding()
相关推荐
终端安全笔记11 分钟前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
传奇开心果编程36 分钟前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift
丿Wayne6 小时前
iOS Token 刷新实战(Actor 避免并发重复刷新)
ios·swift·token·actor·swift并发
终端安全笔记1 天前
iOS 27 给了租赁一个新工具,但它只认受监督的设备
android·网络·安全·ios
大熊猫侯佩1 天前
独立 App 首发完成 iPhone Duo 展开态适配
ios·swiftui·swift
光影少年1 天前
setImmediate 和 setTimeout(0) 的区别
android·前端·react.js·ios·前端框架
2501_916008891 天前
SSE 和 gRPC 流式接口如何抓包,调试 SSE 与 gRPC 流式接口
网络协议·计算机网络·网络安全·ios·adb·https·udp
HouWan2 天前
Flutter: MediaQuery.of(context) 为什么可能拖慢页面?
android·flutter·ios
用户38034165882972 天前
Broadcast Extension 里的 Live Activity:一次跨进程妥协
ios·音视频开发
匠测AI说2 天前
XCUITest 自动化全解:同进程白盒、XCTest 架构、自动同步机制与 iOS 端选型指南
测试工具·ios·自动化