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 = "Twitter" 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 "Twitter" 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 "输入Twitter用户名或完整链接" 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(platform == .whatsapp ? "电话号码" : (platform == .viber ? "消息内容" : "用户名/链接")) .font(.subheadline) .foregroundColor(.primary) Text("*") .foregroundColor(.red) Spacer() } TextField(platform.placeholder, text: $username) .textFieldStyle(RoundedBorderTextFieldStyle()) .autocapitalization(.none) .focused($focusedField, equals: .username) } // 消息内容 (仅Viber) if platform == .viber { VStack(alignment: .leading, spacing: 8) { HStack { Text("消息内容") .font(.subheadline) .foregroundColor(.primary) Spacer() } TextField("输入消息内容", text: $message) .textFieldStyle(RoundedBorderTextFieldStyle()) .focused($focusedField, equals: .message) } } // 格式说明 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)) } } } private func getFormatHint() -> String { switch platform { case .instagram, .facebook, .twitter, .tiktok: if platform == .instagram { return "• 输入Instagram用户名\n• 将生成instagram://user?username=用户名格式" } else if platform == .facebook { return "• 输入Facebook用户ID\n• 将生成fb://profile/用户ID格式" } else { return "• 可以输入用户名(如:username)\n• 或输入完整链接(如:https://twitter.com/username)" } case .snapchat: return "• 输入Snapchat用户名\n• 例如:username" case .whatsapp: return "• 输入WhatsApp电话号码(如:+1234567890)\n• 将生成whatsapp://send?phone=电话号码格式\n• 用户扫描后可直接打开WhatsApp聊天" case .viber: return "• 输入Viber消息内容\n• 将生成可分享的链接" case .spotify: return "• 输入歌曲或播放列表链接\n• 或输入Spotify ID" } } } #Preview { SocialInputView( username: .constant(""), message: .constant(""), platform: .instagram ) }