iosWebViewFix/flutter_inappwebview_ios/ios/Classes/PullToRefresh/PullToRefreshControl.swift

75 lines
2.4 KiB
Swift

//
// File.swift
// flutter_inappwebview
//
// Created by Lorenzo Pichilli on 03/03/21.
//
import Foundation
import Flutter
public class PullToRefreshControl: UIRefreshControl, Disposable {
static let METHOD_CHANNEL_NAME_PREFIX = "com.pichillilorenzo/flutter_inappwebview_pull_to_refresh_"
var plugin: SwiftFlutterPlugin?
var channelDelegate: PullToRefreshChannelDelegate?
var settings: PullToRefreshSettings?
var shouldCallOnRefresh = false
var delegate: PullToRefreshDelegate?
public init(plugin: SwiftFlutterPlugin, id: Any, settings: PullToRefreshSettings?) {
super.init()
self.plugin = plugin
self.settings = settings
if let registrar = plugin.registrar {
let channel = FlutterMethodChannel(name: PullToRefreshControl.METHOD_CHANNEL_NAME_PREFIX + String(describing: id),
binaryMessenger: registrar.messenger())
self.channelDelegate = PullToRefreshChannelDelegate(pullToRefreshControl: self, channel: channel)
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
public func prepare() {
if let settings = settings {
if settings.enabled {
delegate?.enablePullToRefresh()
}
if let color = settings.color, !color.isEmpty {
tintColor = UIColor(hexString: color)
}
if let backgroundTintColor = settings.backgroundColor, !backgroundTintColor.isEmpty {
backgroundColor = UIColor(hexString: backgroundTintColor)
}
if let attributedTitleMap = settings.attributedTitle {
attributedTitle = NSAttributedString.fromMap(map: attributedTitleMap)
}
}
addTarget(self, action: #selector(updateShouldCallOnRefresh), for: .valueChanged)
}
public func onRefresh() {
shouldCallOnRefresh = false
channelDelegate?.onRefresh()
}
@objc public func updateShouldCallOnRefresh() {
shouldCallOnRefresh = true
}
public func dispose() {
channelDelegate?.dispose()
channelDelegate = nil
removeTarget(self, action: #selector(updateShouldCallOnRefresh), for: .valueChanged)
delegate = nil
plugin = nil
}
deinit {
debugPrint("PullToRefreshControl - dealloc")
dispose()
}
}