Files
e-party-iOS/yana/Views/Components/UserIDDisplay.swift
edwinQQQ fa544139c1 feat: 实现DetailView头像点击功能并优化MeView
- 在DetailView中添加头像点击功能,支持展示非当前用户的主页。
- 更新OptimizedDynamicCardView以支持头像点击回调。
- 修改DetailFeature以管理用户主页显示状态。
- 在MeView中添加关闭按钮支持,优化用户体验。
- 确保其他页面的兼容性,未影响现有功能。
2025-08-01 16:12:24 +08:00

74 lines
2.1 KiB
Swift

import SwiftUI
struct UserIDDisplay: View {
let uid: Int
let fontSize: CGFloat
let textColor: Color
let isDisplayCopy: Bool
@State private var showCopiedFeedback: Bool = false
init(uid: Int, fontSize: CGFloat = 14, textColor: Color = .white.opacity(0.7), isDisplayCopy: Bool = false) {
self.uid = uid
self.fontSize = fontSize
self.textColor = textColor
self.isDisplayCopy = isDisplayCopy
}
var body: some View {
HStack(spacing: 4) {
Text("ID: \(String(uid))")
.font(.system(size: fontSize))
.foregroundColor(textColor)
if isDisplayCopy {
Image("icon_copy")
.resizable()
.frame(width: 14, height: 14)
.foregroundColor(textColor)
}
}
.onTapGesture {
if isDisplayCopy {
copyToClipboard()
}
}
.overlay(
Group {
if isDisplayCopy && showCopiedFeedback {
Text("已复制")
.font(.system(size: 12))
.foregroundColor(.white)
.padding(.horizontal, 8)
.padding(.vertical, 4)
.background(Color.black.opacity(0.7))
.cornerRadius(4)
.offset(y: -30)
.transition(.opacity)
}
}
)
}
private func copyToClipboard() {
UIPasteboard.general.string = String(uid)
withAnimation(.easeInOut(duration: 0.2)) {
showCopiedFeedback = true
}
DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
withAnimation(.easeInOut(duration: 0.2)) {
showCopiedFeedback = false
}
}
}
}
#Preview {
VStack(spacing: 20) {
UserIDDisplay(uid: 123456789, isDisplayCopy: true)
UserIDDisplay(uid: 987654321, fontSize: 16, textColor: .black, isDisplayCopy: false)
}
.padding()
}