У меня есть функции, чтобы показать и скрыть индикатор активности. Я хочу показать индикатор активности, когда я удаляю строку из таблицы. Но когда я вызываю действие удаления, функция showActivityIndicator()
, которая должна начать работу первой, начинает работу только после выполнения for
, tableview.deleteRows
и другого кода в deleteAction
. Почему showActivityIndicator()
начать работу в конце? Как заставить функцию показывать ActivityIndicator перед выполнением другого куска кода?
class TestClass: UIViewController, UITableViewDataSource, UITableViewDelegate {
var container: UIView = UIView()
var loadingView: UIView = UIView()
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
// MARK: - showActivityIndicator
func showActivityIndicator() {
// Container that equal iPhone screen size
container.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)
container.center = CGPoint(x: container.frame.midX, y: container.frame.midY)
container.backgroundColor = UIColor.black.withAlphaComponent(0.6)
// View for activity indicator
loadingView.frame = CGRect(x: 0, y: 0, width: 80, height: 80)
loadingView.center = container.center
loadingView.backgroundColor = UIColor.black
loadingView.clipsToBounds = true
loadingView.layer.cornerRadius = 10
// Setup activity indicator
activityIndicator.frame = CGRect(x: 0.0, y: 0.0, width: 40.0, height: 40.0)
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.whiteLarge
activityIndicator.center = CGPoint(x: loadingView.frame.size.width / 2, y: (loadingView.frame.size.height / 2))
loadingView.addSubview(activityIndicator)
container.addSubview(loadingView)
activityIndicator.startAnimating()
// Show activity indicator
let window = UIApplication.shared.keyWindow!
window.addSubview(container)
}
// MARK: - hideActivityIndicator
func hideActivityIndicator() {
activityIndicator.stopAnimating()
container.removeFromSuperview()
}
// MARK: - Delete action(swipe)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
var swipe = UISwipeActionsConfiguration()
switch segmentedControl.selectedSegmentIndex {
case 0:
let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { (action, sourceView, completionHandler) in
self.showActivityIndicator()
for i in 0...10000 {
print("i:",i)
}
self.tableView.deleteRows(at: [indexPath], with: .fade)
completionHandler(true)
self.fetchData()
self.tableView.reloadData()
// self.hideActivityIndicator()
}
let swipe1 = UISwipeActionsConfiguration(actions: [deleteAction])
swipe = swipe1
case 1:
break
default:
break
}
return swipe
}
}