Я проверил другие вопросы / ответы, но ни один из них не работает для меня.
У меня есть много контроллеров представления, которые загружают данные из базы данных во время подготовки к переходу. Поэтому я поместил индикатор активности следующим образом:
fun c tableView / collectionView (didSelectRow / item) {...
self.showSpinner()
self.performSegue(...) -> prepare(for segue...) : data gets loaded
self.removeSpinner()
}
с функции определены в
import UIKit
var aView : UIView?
extension UIViewController{
func showSpinner(){
aView = UIView(frame: self.view.bounds)
aView?.backgroundColor = UIColor(white: 0, alpha: 0.5)
let ai = UIActivityIndicatorView(style: .large)
ai.center = aView!.center
ai.color = .red
ai.startAnimating()
aView?.addSubview(ai)
self.view.addSubview(aView!)
Timer.scheduledTimer(withTimeInterval: 20, repeats: false, block: {_ in self.removeSpinner()})
}
func removeSpinner(){
aView?.removeFromSuperview()
aView = nil
}
}
код выполняется (я проверял это), но нет никаких признаков вращения или представления с более темным фоном.
Даже если я определю
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
и поставлю
activityIndicator.startAnimating()
performSegue...
activityIndicator.stopAnimating()
, то ничего не произойдет. В иерархии представления нет новых элементов (ожидается: представление с индикатором активности или только индикатор активности). Что не так?
ОБНОВЛЕНИЕ:
если я вызову его в
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
self.showSpinner() //show indicator
return indexPath
, весь код (willSelect, DidSelect, Segue) будет выполнен, и только тогда для 1 / 10 se c вижу ли я счетчик при переходе к следующему виду. Мне нужно, однако, чтобы счетчик показывался ДО того, как будет выполнен следующий код DidSelect