使用UIRefreshControl的SwiftUI自定义列表修饰符

时间:2020-05-04 20:03:04

标签: uikit swiftui uirefreshcontrol swiftui-list

我正在尝试在SwiftUI中创建一个列表,我可以将其拖动到刷新内容。我已经遍历了太多代码的Custom ScrollView和UIKit版本,并且我不希望第三方软件包。所以我做了一个小扩展,根本没有用。但是它具有我想要实现的基本思想。我无法访问类内的List对象。

那么我该如何使此代码正常工作,或者有什么更好的方法来编写此“刷新控件”?

import UIKit
import SwiftUI

extension List {
    func refresh(perform: @escaping () -> Void, isLoading: Bool) -> some View {
        var view = Refresher(perform,isLoading)
        return view.configureRefreshControl()
    }
}

class Refresher {
    var tableView: UITableView
    let perform: () -> Void
    var isLoading: Bool
    init(_ perform: @escaping () -> Void,_ isLoading: Bool){
        self.perform = perform
        self.isLoading = isLoading
    }

    func configureRefreshControl() -> UITableView {
        tableView.refreshControl = UIRefreshControl()
        tableView.refreshControl?.addTarget(self, action: #selector(handleRefreshControl), for: .valueChanged)
        return tableView
    }

    @objc func handleRefreshControl(_ tableView: UITableView) {
        self.isLoading = true
        // Update your content…
        self.perform()
        // Dismiss the refresh control.
        DispatchQueue.main.async {
            tableView.refreshControl?.endRefreshing()
            self.isLoading = false
        }
    }

}

0 个答案:

没有答案