import SwiftUI // MARK: - 联系人信息输入组件 struct ContactInputView: View { @Binding var firstName: String @Binding var lastName: String @Binding var phone: String @Binding var email: String @Binding var company: String @Binding var title: String @Binding var address: String @Binding var website: String @FocusState var focusedField: ContactField? // 联系人字段枚举 enum ContactField: Hashable { case firstName, lastName, phone, email, company, title, address, website } var body: some View { VStack(spacing: 16) { // 姓名 HStack(spacing: 12) { VStack(alignment: .leading, spacing: 8) { HStack { Text("名") .font(.subheadline) .foregroundColor(.primary) Text("*") .foregroundColor(.red) Spacer() } TextField("名", text: $firstName) .textFieldStyle(RoundedBorderTextFieldStyle()) .focused($focusedField, equals: .firstName) } VStack(alignment: .leading, spacing: 8) { HStack { Text("姓") .font(.subheadline) .foregroundColor(.primary) Text("*") .foregroundColor(.red) Spacer() } TextField("姓", text: $lastName) .textFieldStyle(RoundedBorderTextFieldStyle()) .focused($focusedField, equals: .lastName) } } // 电话 VStack(alignment: .leading, spacing: 8) { HStack { Text("电话") .font(.subheadline) .foregroundColor(.primary) Spacer() } TextField("+86 138 0013 8000", text: $phone) .textFieldStyle(RoundedBorderTextFieldStyle()) .keyboardType(.phonePad) .focused($focusedField, equals: .phone) } // 邮箱 VStack(alignment: .leading, spacing: 8) { HStack { Text("邮箱") .font(.subheadline) .foregroundColor(.primary) Spacer() } TextField("user@example.com", text: $email) .textFieldStyle(RoundedBorderTextFieldStyle()) .keyboardType(.emailAddress) .autocapitalization(.none) .focused($focusedField, equals: .email) } // 公司 VStack(alignment: .leading, spacing: 8) { HStack { Text("公司") .font(.subheadline) .foregroundColor(.primary) Spacer() } TextField("公司名称", text: $company) .textFieldStyle(RoundedBorderTextFieldStyle()) .focused($focusedField, equals: .company) } // 职位 VStack(alignment: .leading, spacing: 8) { HStack { Text("职位") .font(.subheadline) .foregroundColor(.primary) Spacer() } TextField("职位名称", text: $title) .textFieldStyle(RoundedBorderTextFieldStyle()) .focused($focusedField, equals: .title) } // 地址 VStack(alignment: .leading, spacing: 8) { HStack { Text("地址") .font(.subheadline) .foregroundColor(.primary) Spacer() } TextField("详细地址", text: $address) .textFieldStyle(RoundedBorderTextFieldStyle()) .focused($focusedField, equals: .address) } // 网站 VStack(alignment: .leading, spacing: 8) { HStack { Text("网站") .font(.subheadline) .foregroundColor(.primary) Spacer() } TextField("https://example.com", text: $website) .textFieldStyle(RoundedBorderTextFieldStyle()) .keyboardType(.URL) .autocapitalization(.none) .focused($focusedField, equals: .website) } } .toolbar { ToolbarItemGroup(placement: .keyboard) { Spacer() Button("完成") { focusedField = nil } .foregroundColor(.blue) .font(.system(size: 16, weight: .medium)) } } } } #Preview { ContactInputView( firstName: .constant(""), lastName: .constant(""), phone: .constant(""), email: .constant(""), company: .constant(""), title: .constant(""), address: .constant(""), website: .constant("") ) }