mirror of
https://github.com/easychen/pushdeer.git
synced 2024-11-14 14:29:23 +08:00
d3050e154f
修改配置为pushdeer官方配置(包名,团队标识,api域名); 补充新添加的文字的英文翻译 (国际化); 设备和key是空列表时,加一个提示,让用户知道可以新增; 尝试解决列表删除项后UI偶尔没刷新的bug; 首次打开提示注册设备; 首次自动生成一个 key; 消息列表放到第一个位置; 推送测试时自动生成一个key; 后台进入前台后, 刷新本地消息列表; 键盘上方添加完成按钮, 用于收键盘; 发送推送测试后 自动收键盘; 及时清角标, 拯救强迫症; 为了保持一致, 设置页也改为可滑动; 添加SelfHosted配置, 可以直接一套代码跑出两种版本; 支持服务自建; 添加Env统一管理环境变量.
79 lines
2.1 KiB
Swift
79 lines
2.1 KiB
Swift
//
|
|
// ViewExtension.swift
|
|
// PushDeer
|
|
//
|
|
// Created by HEXT on 2022/2/12.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
/// 给 View 加扩展, 包括给系统扩展包一层以兼容老系统
|
|
extension View {
|
|
|
|
/*
|
|
ps: #available(iOS 15.0, *) 判断在 Xcode 13.2 上面有 bug
|
|
https://stackoverflow.com/questions/70506330/swiftui-app-crashes-with-different-searchbar-viewmodifier-on-ios-14-15/70603710#70603710
|
|
例如: if #available(iOS 15.0, *) { textField().submitLabel(.done) }
|
|
比如就算在 iOS 14 上, 也会寻找 submitLabel 方法,
|
|
submitLabel 方法在 iOS 14 上 不存在, 就会造成奔溃.
|
|
一般解决方法为多包一层, 比如用自己的 ViewModifier 包装系统的, 再去判断
|
|
比如自己写个 aaa ViewModifier 去包装系统的 submitLabel, 然后使用的地方改成自己的方法:
|
|
if #available(iOS 15.0, *) { textField().aaa(.done) }
|
|
自己写的 aaa ViewModifier 方法在每个系统上都可以找到, 就不会奔溃了
|
|
*/
|
|
|
|
/// 给 List 添加 下拉刷新
|
|
func refresh(action: @escaping @Sendable () async -> Void) -> some View {
|
|
Group {
|
|
if #available(iOS 15.0, *) {
|
|
self.modifier(RefreshModifier(action: action))
|
|
} else {
|
|
self
|
|
}
|
|
}
|
|
}
|
|
|
|
/// 键盘回车按钮的文字显示为: 完成/Done
|
|
func submitLabelDone() -> some View {
|
|
Group {
|
|
if #available(iOS 15.0, *) {
|
|
self.modifier(SubmitLabelDoneModifier())
|
|
} else {
|
|
self
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@available(iOS 15.0, *)
|
|
struct RefreshModifier: ViewModifier {
|
|
let action: @Sendable () async -> Void
|
|
func body(content: Content) -> some View {
|
|
content
|
|
.refreshable(action: action)
|
|
}
|
|
}
|
|
|
|
@available(iOS 15.0, *)
|
|
struct SubmitLabelDoneModifier: ViewModifier {
|
|
func body(content: Content) -> some View {
|
|
content
|
|
.submitLabel(.done)
|
|
}
|
|
}
|
|
|
|
struct ViewExtension_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
List {
|
|
Text("A List Item")
|
|
Text("A Second List Item")
|
|
Text("A Third List Item")
|
|
TextField("请输入", text: .constant(""))
|
|
.submitLabelDone()
|
|
}
|
|
.refresh {
|
|
|
|
}
|
|
}
|
|
}
|