Beim Anzeigen eines Artikels in "TableView" unter Verwendung der von Qiita bereitgestellten API habe ich __read __, __ refresh __, __ update __ von Daten implementiert und ihn als Memorandum veröffentlicht. Machen.
【Xcode】Version 12.0.1 【Swift】Version 5.3
CustomTableView.swift
import UIKit
class CustomTableView: UITableView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override init(frame:CGRect, style: UITableView.Style) {
super.init(frame: frame, style: .plain)
setup()
}
private func setup() {
let refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Wird geladen")
self.refreshControl = refreshControl
//Zeile, wenn UITableView leer ist(Separator)Stellen Sie eine leere Ansicht zum Deaktivieren ein
self.tableFooterView = UIView()
}
func addTargetToRefreshControl(_ target: Any?, action: Selector, event: UIControl.Event) {
self.refreshControl?.addTarget(target, action: action, for: event)
}
func beginRefreshing() {
guard let refreshControl = self.refreshControl else { return }
refreshControl.beginRefreshing()
refreshControl.sendActions(for: .valueChanged)
self.contentOffset.y = -self.bounds.height
}
func endRefreshing() {
guard let refreshControl = self.refreshControl else { return }
refreshControl.endRefreshing()
}
}
ViewController.swift
class ViewController: UIViewController {
@IBOutlet private weak var tableView: CustomTableView!
private var reloading: Bool = false
private var page: Int = 20
#···Kürzung···
override func viewDidLoad() {
super.viewDidLoad()
#···Kürzung···
tableView.addTargetToRefreshControl(self, action: #selector(self.refreshArticlesAction), event: .valueChanged)
//Rufen Sie refreshControl auf und laden Sie
tableView.beginRefreshing()
#・ ・ ・ Ausgelassen (Prozess zum Erfassen von Daten von Qiita) ・ ・ ・
tableView.endRefreshing()
tableView.reloadData()
}
@objc private func refreshArticlesAction() {
//Initialisieren Sie die Anzahl der Akquisitionen
page = 20
#・ ・ ・ Ausgelassen (Prozess zum Erfassen von Daten von Qiita) ・ ・ ・
tableView.endRefreshing()
tableView.reloadData()
}
}
#···Kürzung···
extension ViewController: UITableViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let height = scrollView.frame.size.height
let contentYoffset = scrollView.contentOffset.y
let distanceFromBottom = scrollView.contentSize.height - contentYoffset
if distanceFromBottom < height {
//Da es viele Male aufgerufen wird, setzen Sie die Variable: reloading während des erneuten Ladens auf true.
if !reloading && page < 100 {
//Erhöhen Sie die Anzahl der Akquisitionen um 20
if page <= 100 { page += 20 }
//Ändern Sie das Reload-Verarbeitungsflag in "true".
reloading.toggle()
#・ ・ ・ Ausgelassen (Prozess zum Erfassen von Daten von Qiita) ・ ・ ・
//Ändern Sie das Flag für die Neuladeverarbeitung in "false".
reloading.toggle()
tableView.reloadData()
}
}
}
}
refreshControl.beginRefreshing ()
with viewDidLoad
auf, um den Ladevorgang zu starten.Qiita
.CustomTableView.swift
func addTargetToRefreshControl(_ target: Any?, action: Selector, event: UIControl.Event) {
self.refreshControl?.addTarget(target, action: action, for: event)
}
ViewController.swift
tableView.addTargetToRefreshControl(self, action: #selector(self.refreshArticlesAction), event: .valueChanged)
tableView.reloadData ()
.ViewController.swift
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let height = scrollView.frame.size.height
let contentYoffset = scrollView.contentOffset.y
let distanceFromBottom = scrollView.contentSize.height - contentYoffset
if distanceFromBottom < height {
//Da es viele Male aufgerufen wird, setzen Sie die Variable: reloading während des erneuten Ladens auf true.
if !reloading && page < 100 {
//Erhöhen Sie die Anzahl der Akquisitionen um 20
if page <= 100 { page += 20 }
//Ändern Sie das Reload-Verarbeitungsflag in "true".
reloading.toggle()
#・ ・ ・ Ausgelassen (Prozess zum Erfassen von Daten von Qiita) ・ ・ ・
//Ändern Sie das Flag für die Neuladeverarbeitung in "false".
reloading.toggle()
tableView.reloadData()
}
}
}