From e2a5e263f4068336674b742b96915d7bc654ad5c Mon Sep 17 00:00:00 2001 From: nythepegasus Date: Mon, 6 May 2024 20:14:03 -0400 Subject: [PATCH] Fixes Error Log context menu appearing while scrolling --- .../Error Log/ErrorLogViewController.swift | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/AltStore/Settings/Error Log/ErrorLogViewController.swift b/AltStore/Settings/Error Log/ErrorLogViewController.swift index bde4aa91..386137ad 100644 --- a/AltStore/Settings/Error Log/ErrorLogViewController.swift +++ b/AltStore/Settings/Error Log/ErrorLogViewController.swift @@ -21,6 +21,13 @@ final class ErrorLogViewController: UITableViewController private lazy var dataSource = self.makeDataSource() private var expandedErrorIDs = Set() + private var isScrolling = false { + didSet { + guard self.isScrolling != oldValue else { return } + self.updateButtonInteractivity() + } + } + private lazy var timeFormatter: DateFormatter = { let dateFormatter = DateFormatter() dateFormatter.dateStyle = .none @@ -103,6 +110,7 @@ private extension ErrorLogViewController ]) cell.menuButton.menu = menu + cell.menuButton.showsMenuAsPrimaryAction = self.isScrolling ? false : true } // Include errorDescriptionTextView's text in cell summary. @@ -331,3 +339,39 @@ extension ErrorLogViewController: QLPreviewControllerDataSource { return fileURL as QLPreviewItem } } + +extension ErrorLogViewController +{ + override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) + { + self.isScrolling = true + } + + override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) + { + self.isScrolling = false + } + + override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) + { + guard !decelerate else { return } + self.isScrolling = false + } + + private func updateButtonInteractivity() + { + guard #available(iOS 14, *) else { return } + + for case let cell as ErrorLogTableViewCell in self.tableView.visibleCells + { + if self.isScrolling + { + cell.menuButton.showsMenuAsPrimaryAction = false + } + else + { + cell.menuButton.showsMenuAsPrimaryAction = true + } + } + } +}