- FDFullscreenPopGesture (1.1)
- FSPagerView (0.8.3)
- HandyJSON (5.0.2)
+ - HorizonCalendar (2.0.0)
- IQKeyboardCore (1.0.5)
- IQKeyboardManagerSwift (8.0.1):
- IQKeyboardManagerSwift/Appearance (= 8.0.1)
- FDFullscreenPopGesture
- FSPagerView
- HandyJSON
+ - HorizonCalendar
- IQKeyboardManagerSwift
- JXPagingView/Paging
- JXSegmentedView
- FDFullscreenPopGesture
- FSPagerView
- HandyJSON
+ - HorizonCalendar
- IQKeyboardCore
- IQKeyboardManagerSwift
- IQKeyboardNotification
FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0
FSPagerView: 670405b2f18e2a87fa37f20b00de783e562c25a8
HandyJSON: 9e4e236f5d2dbefad5155a77417bbea438201c03
+ HorizonCalendar: 21e600058a8f4d407c79ef7848beda692c53a484
IQKeyboardCore: 28c8bf3bcd8ba5aa1570b318cbc4da94b861711e
IQKeyboardManagerSwift: 835fc9c6e4732398113406d84900ad2e8f141218
IQKeyboardNotification: d7382c4466c5a5adef92c7452ebf861b36050088
YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
ZipArchive: e25a4373192673e3229ac8d6e9f64a3e5713c966
-PODFILE CHECKSUM: 3a7a732ff076ffc1ffadc01ed95542ab50a068f8
+PODFILE CHECKSUM: 24b6fbdd53f25d33ef9e437c63417248e19ac8ee
COCOAPODS: 1.16.2
static var appLanguage = AppSupportLanguage.english
/// 微信开发平台 App ID
+// static let wxAppID = "wxd9d677e0024caa90"
+// static let wxSecret = "751582916ca3779b7b99356609e30e55"
+// static let wxUniversalLink = "https://www.thisiot.com/flychat"
+//
static let wxAppID = "wxf19317f23b00d8ab"
- static let wxUniversalLink = "https://www.thisiot.com/flychat"
+ static let wxUniversalLink = "https://dc-cloud-pub.tos-cn-guangzhou.volces.com/app/"
static let wxSecret = "SECRET"
/// 通用链接
// https://dc-cloud-pub.tos-cn-guangzhou.volces.com/apple-app-site-association
</array>
<key>com.apple.developer.associated-domains</key>
<array>
- <string>applinks:www.thisiot.com</string>
+ <string>applinks:https://dc-cloud-pub.tos-cn-guangzhou.volces.com</string>
</array>
</dict>
</plist>
// v.selectedIndex(4)
// v.show(animate: true)
- App.shared.goToPage(BleScanVC())
+// App.shared.goToPage(BleScanVC())
+ App.shared.goToPage(CalendarPickerVC())
+
// BleManager.shared.checkSettingsConnected()
}
@objc protocol RecordSearchBarDelegate {
func searchBarTextDidChange(_ toolBar:RecordSearchBar,_ text:String)
+ func searchBarcalendarAction(_ toolBar:RecordSearchBar)
}
class RecordSearchBar:BaseView{
App.shared.popPage(animated: true)
}
@objc func calendarAction(){
-
+ delegate?.searchBarcalendarAction(self)
}
}
extension RecordSearchBar:UITextFieldDelegate{
--- /dev/null
+//
+// CalendarPickerVC.swift
+// ShenYin
+//
+// Created by liangshi on 2025/11/14.
+//
+
+import UIKit
+import HorizonCalendar
+
+class CalendarPickerVC:BaseVC{
+
+ var didSelectedDate:((String)->Void)?
+
+ var monthsLayout: MonthsLayout = MonthsLayout.vertical(options: VerticalMonthsLayoutOptions(
+ pinDaysOfWeekToTop: false,
+ alwaysShowCompleteBoundaryMonths: false,
+ scrollsToFirstMonthOnStatusBarTap: false))
+
+ var defaultDate:String?
+ var selectedDate:Date? = Date()
+ var calendarView:CalendarView!
+ lazy var calendar = Calendar.current
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+
+ navBar.titleLabel.text = "按日期查找"
+
+ calendarView = CalendarView(initialContent: makeContent())
+ calendarView.daySelectionHandler = { [weak self] day in
+ guard let self else { return }
+
+ selectedDate = calendar.date(from: day.components)
+ calendarView.setContent(makeContent())
+ let text = selectedDate!.format(.short)
+ defaultDate = text
+ Logger.debug(text)
+ didSelectedDate?(text)
+ DispatchQueue.main.asyncAfter(deadline:.now() + 0.3) {
+ App.shared.popPage()
+ }
+
+ }
+ view.addSubview(calendarView)
+
+ calendarView.translatesAutoresizingMaskIntoConstraints = false
+ calendarView.snp.makeConstraints { make in
+ make.top.equalToSuperview().inset(kNavBtm)
+ make.left.right.equalToSuperview()
+ make.bottom.equalToSuperview()
+ }
+
+
+ }
+ func makeContent() -> CalendarViewContent {
+ let startDate = calendar.date(from: DateComponents(year: 2025, month: 11, day: 01))!
+ let endDate = calendar.date(from: DateComponents(year: 2099, month: 12, day: 31))!
+
+// let selectedDate = selectedDate
+
+ let dayDateFormatter = DateFormatter()
+ dayDateFormatter.calendar = calendar
+ dayDateFormatter.locale = calendar.locale
+
+ dayDateFormatter.dateFormat = DateFormatter.dateFormat(
+ fromTemplate: "EEEE, MMM d, yyyy",
+ options: 0,
+ locale: calendar.locale ?? Locale.current)
+
+ return CalendarViewContent(
+ calendar: calendar,
+ visibleDateRange: startDate...endDate,
+ monthsLayout: monthsLayout)
+
+ .interMonthSpacing(24)
+ .verticalDayMargin(8)
+ .horizontalDayMargin(8)
+
+
+ .dayItemProvider { [self, calendar, dayDateFormatter] day in
+ var invariantViewProperties = DayView.InvariantViewProperties.baseInteractive
+
+ let date = calendar.date(from: day.components)
+ let selectedDate = date?.format(.short)
+ if let text = defaultDate, selectedDate == text {
+// invariantViewProperties.backgroundShapeDrawingConfig.borderColor = .blue
+ invariantViewProperties.backgroundShapeDrawingConfig.fillColor = .color(.theme).withAlphaComponent(0.5)
+ }
+
+
+// return DayView.calendarItemModel(
+// invariantViewProperties: invariantViewProperties,
+// content: .init(
+// dayText: "\(day.day)",
+// accessibilityLabel: date.map { dayDateFormatter.string(from: $0) },
+// accessibilityHint: nil))
+ return DayView.calendarItemModel(
+ invariantViewProperties: invariantViewProperties,
+ content: .init(
+ dayText: "\(day.day)",
+ accessibilityLabel: date.map { dayDateFormatter.string(from: $0) },
+ accessibilityHint: nil))
+ }
+ }
+}
var searchList = [RecordHistoryModel]()
var deleteCallback:((_ list:[RecordHistoryModel])->Void)?
var collectStateChangeCallback:(()->Void)?
-
+ var selectedDate:String = Date().format(.short)
init(list:[RecordHistoryModel]) {
orginList = list
searchList = orginList
}
extension CloudSearchVC:RecordSearchBarDelegate{
func searchBarTextDidChange(_ toolBar: RecordSearchBar, _ text: String) {
+ startSearch(text: text)
+ }
+
+ func searchBarcalendarAction(_ toolBar:RecordSearchBar){
+ let vc = CalendarPickerVC()
+ vc.defaultDate = selectedDate
+ vc.didSelectedDate = {[weak self] date in
+ guard let self = self else {
+ return
+ }
+ selectedDate = date
+ startSearch(text: toolBar.textField.text ?? "")
+ }
+ App.shared.goToPage(vc)
+ }
+
+ func startSearch(text:String){
+ var dateList = [RecordHistoryModel]()
+ if selectedDate.isEmpty {
+ dateList = orginList
+ }
+ else{
+ dateList = orginList.filter({$0.createTime.contains(selectedDate) })
+ }
+
if text.isEmpty {
- searchList = orginList
+ searchList = dateList
}
else{
var list = [RecordHistoryModel]()
- for item in orginList {
+ for item in dateList {
if item.name.uppercased() .contains(text.uppercased()) {
list.append(item)
}
}
tableView.reloadData()
}
-
-
}
var searchList = [RecordDetailModel]()
var deleteCallback:((_ list:[RecordDetailModel])->Void)?
var collectStateChangeCallback:((RecordDetailModel)->Void)?
+ var selectedDate:String = Date().format(.short)
// init(data:[RecordDetailModel]) {
// list = data
// super.init()
}
extension HistorySearchVC:RecordSearchBarDelegate{
func searchBarTextDidChange(_ toolBar: RecordSearchBar, _ text: String) {
+ startSearch(text: text)
+ }
+
+ func searchBarcalendarAction(_ toolBar:RecordSearchBar){
+ let vc = CalendarPickerVC()
+ vc.defaultDate = selectedDate
+ vc.didSelectedDate = {[weak self] date in
+ guard let self = self else {
+ return
+ }
+ selectedDate = date
+ startSearch(text: toolBar.textField.text ?? "")
+ }
+ App.shared.goToPage(vc)
+ }
+
+ func startSearch(text:String){
+ var dateList = [RecordDetailModel]()
+ if selectedDate.isEmpty {
+ dateList = orginList
+ }
+ else{
+ dateList = orginList.filter({$0.createTime.contains(selectedDate) })
+ }
+
if text.isEmpty {
- searchList = orginList
+ searchList = dateList
}
else{
var list = [RecordDetailModel]()
- for item in orginList {
+ for item in dateList {
if item.name.uppercased() .contains(text.uppercased()) {
list.append(item)
}
}
tableView.reloadData()
}
-
-
}
guard let self = self else { return }
data!.to = AiSupportLanguage.translate.first(where: {$0.title == value})!
translateAction()
+ if !topBar.tranlateItem.isSelected {
+ topBar.tralateAction()
+ }
}
}
// }
contentView.addSubviews([bgView,icon])
bgView.addSubviews([imgView])
+ let longTap = UILongPressGestureRecognizer(target: self, action: #selector(longPressAction(_:)))
+ bgView.addGestureRecognizer(longTap)
}
override func setupLayout() {
make.left.right.equalToSuperview().inset(5)
}
}
+
+ @objc func longPressAction(_ gesture: UILongPressGestureRecognizer) {
+ if gesture.state == .began {
+
+ } else if gesture.state == .ended {
+ print("长按结束")
+ }
+ }
}
pod 'WechatOpenSDK-XCFramework'
-# pod 'MultiSlider'
+ pod 'HorizonCalendar'#日历
# pod 'DSWaveformImage'
# pod 'NVActivityIndicatorView', '~> 5.1.1' # 最新稳定版