51 lines
1.3 KiB
Swift
51 lines
1.3 KiB
Swift
import SwiftUI
|
||
|
||
// 输入框类型枚举(更优雅的方式)
|
||
enum TextFieldType {
|
||
case username
|
||
case password
|
||
case number
|
||
case email
|
||
case text
|
||
}
|
||
|
||
struct CustomTextField: View {
|
||
// MARK: - 属性
|
||
let placeholder: String
|
||
let type: TextFieldType
|
||
|
||
// 双向绑定的值(关键!)
|
||
@Binding var value: String
|
||
|
||
// MARK: - 主体视图
|
||
var body: some View {
|
||
Group { // 使用 Group 统一修饰符
|
||
if type == .password {
|
||
// 密码框
|
||
SecureField(placeholder, text: $value)
|
||
} else {
|
||
// 普通文本框
|
||
TextField(placeholder, text: $value)
|
||
.textInputAutocapitalization(.never) // 关闭自动大写
|
||
.disableAutocorrection(true) // 关闭自动纠错
|
||
}
|
||
}
|
||
.padding()
|
||
.background(Color(.systemGray6))
|
||
.cornerRadius(8)
|
||
.keyboardType(keyboardType(for: type)) // 设置键盘类型
|
||
}
|
||
|
||
// MARK: - 根据类型返回键盘类型
|
||
private func keyboardType(for type: TextFieldType) -> UIKeyboardType {
|
||
switch type {
|
||
case .number:
|
||
return .numberPad
|
||
case .email:
|
||
return .emailAddress
|
||
default:
|
||
return .default
|
||
}
|
||
}
|
||
}
|