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.

215 lines
7.5 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 = "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
)
}