import SwiftUI // MARK: - 社交平台输入组件 struct SocialInputView: View { @Binding var username: String @Binding var message: String let platform: SocialPlatform @FocusState var focusedField: SocialField? // 社交平台枚举 enum SocialPlatform: String, CaseIterable { case instagram = "Instagram" case facebook = "Facebook" case twitter = "X" case tiktok = "Tiktok" case snapchat = "Snapchat" case whatsapp = "Whatsapp" case viber = "Viber" case spotify = "Spotify" var displayName: String { switch self { case .instagram: return "Instagram" case .facebook: return "Facebook" case .twitter: return "X" case .tiktok: return "TikTok" case .snapchat: return "Snapchat" case .whatsapp: return "WhatsApp" case .viber: return "Viber" case .spotify: return "Spotify" } } var icon: String { switch self { case .instagram: return "camera" case .facebook: return "person.2" case .twitter: return "bird" case .tiktok: return "music.note" case .snapchat: return "ghost" case .whatsapp: return "message" case .viber: return "phone" case .spotify: return "music.note.list" } } var placeholder: String { switch self { case .instagram: return "用户名或链接" case .facebook: return "用户名或链接" case .twitter: return "用户名" case .tiktok: return "用户名" case .snapchat: return "用户名" case .whatsapp: return "输入WhatsApp电话号码" case .viber: return "电话号码" case .spotify: return "歌曲或播放列表链接" } } var hint: String { switch self { case .instagram: return "输入Instagram用户名" case .facebook: return "输入Facebook用户ID或链接" case .twitter: return "输入X用户名或完整链接" case .tiktok: return "输入TikTok用户名或完整链接" case .snapchat: return "输入Snapchat用户名" case .whatsapp: return "输入WhatsApp消息内容" case .viber: return "输入Viber电话号码" case .spotify: return "输入Spotify歌曲或播放列表链接" } } } // 社交字段枚举 enum SocialField: Hashable { case username, message } var body: some View { VStack(spacing: 16) { // 平台信息 HStack { Image(systemName: platform.icon) .font(.title2) .foregroundColor(.blue) VStack(alignment: .leading, spacing: 2) { Text(platform.displayName) .font(.headline) .foregroundColor(.primary) Text(platform.hint) .font(.caption) .foregroundColor(.secondary) } Spacer() } .padding(.horizontal, 12) .padding(.vertical, 8) .background( RoundedRectangle(cornerRadius: 8) .fill(Color.blue.opacity(0.1)) ) // 用户名/链接 (必填) VStack(alignment: .leading, spacing: 8) { HStack { // 根据平台显示不同的提示 Text(getInputLabel()) .font(.subheadline) .foregroundColor(.primary) Text("*") .foregroundColor(.red) Spacer() } TextField(platform.placeholder, text: $username) .textFieldStyle(RoundedBorderTextFieldStyle()) .autocapitalization(.none) .focused($focusedField, equals: .username) } // 格式说明 VStack(alignment: .leading, spacing: 8) { HStack { Image(systemName: "info.circle") .font(.caption) .foregroundColor(.blue) Text("格式说明") .font(.caption) .foregroundColor(.primary) Spacer() } Text(getFormatHint()) .font(.caption) .foregroundColor(.secondary) .lineLimit(nil) } .padding(.horizontal, 12) .padding(.vertical, 8) .background( RoundedRectangle(cornerRadius: 8) .fill(Color.blue.opacity(0.1)) ) } .toolbar { ToolbarItemGroup(placement: .keyboard) { Spacer() Button("完成") { focusedField = nil } .foregroundColor(.blue) .font(.system(size: 16, weight: .medium)) } } } // MARK: - 根据平台获取输入标签 private func getInputLabel() -> String { switch platform { case .instagram: return "Instagram用户名" case .facebook: return "用户ID或链接" case .twitter: return "X用户名" case .tiktok: return "TikTok用户名" case .snapchat: return "Snapchat用户名" case .whatsapp: return "WhatsApp电话号码" case .viber: return "Viber电话号码" case .spotify: return "歌曲链接或ID" } } private func getFormatHint() -> String { switch platform { case .instagram: return "• 输入Instagram用户名\n• 将生成instagram://user?username=用户名格式" case .facebook: return "• 输入Facebook用户ID或完整链接\n• 将自动提取用户名并生成fb://profile/格式\n• 支持:username 或 https://facebook.com/username" case .twitter: return "• 可以输入用户名(如:username)\n• 将生成twitter://user?screen_name=格式\n• 用户扫描后可直接打开X应用" case .tiktok: return "• 输入TikTok用户名(如:username)\n• 将生成https://www.tiktok.com/@username格式\n• 用户扫描后可直接访问TikTok主页" case .snapchat: return "• 输入Snapchat用户名\n• 例如:username" case .whatsapp: return "• 输入WhatsApp电话号码(如:+1234567890)\n• 将生成whatsapp://send?phone=电话号码格式\n• 用户扫描后可直接打开WhatsApp聊天" case .viber: return "• 输入Viber电话号码(如:+1234567890)\n• 将生成viber://add?number=格式\n• 用户扫描后可直接添加Viber联系人" case .spotify: return "• 输入歌曲或播放列表链接\n• 或输入Spotify ID" } } } #Preview { SocialInputView( username: .constant(""), message: .constant(""), platform: .tiktok ) }