代码片段

iOS跨页面按需刷新

2021-12-03  本文已影响0人  霸哥终结者

背景

多页面数据关联,页面重新出现时都需要刷新,不需要刷新时也刷新,所以有很多无效请求。如果使用通知,通知是立即直接刷新,没有在页面出现时刷新,也有很多无效请求。如果当数据更改时,通知VC在出现时刷新,且只刷新一次,就好了。

NexusRefresh介绍

专注为页面刷新设计。当页面被通知需要刷新时,页面出现时才刷新(只刷新一次),而不是通知一次刷新一次。可以给页面添加多个标签,当该标签需要刷新时,所有含有该标签的页面都可以刷新。

安装

pod 'NexusRefresh', '2.0.4'

使用

  1. 定义刷新标签
import NexusRefresh

// MARK: 刷新标签扩展
extension NexusRefreshManager.Tag {
  /// 首页
  static let Home = NexusRefreshManager.Tag("Home")
   
}
  1. 监听刷新
class HomeViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    // 将自己加入可刷新池
    NexusRefreshManager.shared.add(self, tags: [.Home]) { object in
        // "tags: \(object.tags), data: \(object.data)"
        print("HomeViewController 刷新了")
    }
  }
}
  1. 通知刷新
// 调用
NexusRefreshManager.shared.refresh(tags: [.Home])

/// 刷新方法详情
/// - Parameters:
///  - tags: 标签列表
///  - data: 传递数据
///  - filtObjects: 过滤列表
///  - force: 强制刷新,会直接刷新,不会等待出现(仅对VC有用)
public func refresh(tags: Set<Tag>, data: Any? = nil, filtObjects: [AnyObject] = [], force: Bool = false)

Q&A

  1. 可以刷新除UIViewController以外的对象么?
    可以,但是他们会在立即刷新,而不是出现时刷新

  2. 什么时候刷新?
    UIViewController若不在顶层,出现时刷新,在顶层,立即刷新。
    非UIViewController立即刷新。

  3. 同一个对象可以多次添加刷新通知吗?
    不可以,会以最后一次添加为准

  4. NotificationCenter异同

Author

可以通过邮箱联系我: 664454335@qq.com

最后附上地址

github地址: https://github.com/LuckyPia/NexusRefresh
码云地址: https://gitee.com/luckypia/NexusRefresh

上一篇下一篇

猜你喜欢

热点阅读