pushdeer/ios/PushDeer-iOS/PushDeer/Common/ViewExtension.swift
hext d3050e154f 添加自建服务配置, 优化交互, 修复bug.
修改配置为pushdeer官方配置(包名,团队标识,api域名);
补充新添加的文字的英文翻译 (国际化);
设备和key是空列表时,加一个提示,让用户知道可以新增;
尝试解决列表删除项后UI偶尔没刷新的bug;
首次打开提示注册设备;
首次自动生成一个 key;
消息列表放到第一个位置;
推送测试时自动生成一个key;
后台进入前台后, 刷新本地消息列表;
键盘上方添加完成按钮, 用于收键盘;
发送推送测试后 自动收键盘;
及时清角标, 拯救强迫症;
为了保持一致, 设置页也改为可滑动;
添加SelfHosted配置, 可以直接一套代码跑出两种版本;
支持服务自建;
添加Env统一管理环境变量.
2022-02-14 01:13:26 +08:00

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 {
}
}
}