You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

192 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
}
//
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/格式\n• 支持username 或 https://facebook.com/username"
} 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电话号码+1234567890\n• 将生成viber://add?number=格式\n• 用户扫描后可直接添加Viber联系人"
case .spotify:
return "• 输入歌曲或播放列表链接\n• 或输入Spotify ID"
}
}
}
#Preview {
SocialInputView(
username: .constant(""),
message: .constant(""),
platform: .instagram
)
}