Первая функция начинает выполняться только после выполнения другого куска кода - PullRequest
1 голос
/ 18 апреля 2019

У меня есть функции, чтобы показать и скрыть индикатор активности. Я хочу показать индикатор активности, когда я удаляю строку из таблицы. Но когда я вызываю действие удаления, функция 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

}

}

...