I have written code with swift4 and running on iPhone simulator.
DispatchQueue.main.async {
self.view.activityindicatorStop()
self.mytableView.reloadData()
}
Above code has following operation
Stoping Activity indicator and update TableView
after data filling with array..
But expected does not happen..
I got following
TableView
not updated. code i have used:
super.viewDidLoad()
UserDefaults.lastAccessDate = Date()
self.view.activityStartAnimating(activityColor: #colorLiteral(red: 0.9176470588, green: 0.2901960784, blue: 0.262745098, alpha: 1), backgroundColor: #colorLiteral(red: 1, green: 1, blue: 1, alpha: 0))
//Calling the API
Capsulle.retriveSpaceTimeCapsulle { (data, respose, error) in
if nil == error
{
let ServerData = serverComm.toJSONObject(with: data!)
let result = ServerData.0 as? Array<Dictionary<String, Any>>
self.capsulleDetail = result
if (result == nil)
{
if false == loginCredential.isHavingAccessToken
{
loginCredential.isHavingAccessToken = false;
UserDefaults.standard.set( "", forKey: "UserEmailID")
let objStoryBoard:UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
let initialViewController:UIViewController = objStoryBoard.instantiateViewController(withIdentifier: "loginVC")
self.present(initialViewController, animated: true, completion: {
})
return
}
}
DispatchQueue.main.sync {
self.CapsulleCollectionView.reloadData()
self.view.activityStopAnimating()
}
}
}
}
func activityStartAnimating(activityColor: UIColor, backgroundColor: UIColor) {
let backgroundView = UIView()
backgroundView.frame = CGRect.init(x: 0, y: 0, width: self.bounds.width, height: self.bounds.height)
backgroundView.backgroundColor = backgroundColor
backgroundView.tag = 475647
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
activityIndicator = UIActivityIndicatorView(frame: CGRect.init(x: 0, y: 0, width: 50, height: 50))
activityIndicator.center = self.center
activityIndicator.hidesWhenStopped = true
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
activityIndicator.color = activityColor
activityIndicator.startAnimating()
self.isUserInteractionEnabled = false
backgroundView.addSubview(activityIndicator)
self.addSubview(backgroundView)
}
func activityStopAnimating() {
if let background = self.viewWithTag(475647){
background.removeFromSuperview()
}
self.isUserInteractionEnabled = true
}
i have created activityStopAnimating and activityStartAnimating as extensions
DispatchQueue.main.async {
self.view.activityIndicator.stopAnimating()
self.view.activityIndicator.isHidden = true
self.mytableView.beginUpdates()
self.mytableView.endUpdates()
}
your code should work for tableView
reload but you can also try using beginUpdates()
and endUpdates()
method. and to stopActivityindicator call stopAnimating()
and then hide your activityindicator this code should work for you
Enjoy coding.
For tableView to reload you have to make sure that self.capsulleDetail
have data changed if this array is your data source i think it not changed or still zero so reloadData() will do nothing
To hide indicator you should set this property to hide it when stop or hide it directly by sting is-hidden to true
self.activityIndicator.hidesWhenStopped = true
I don't Find any correct solutions to do this perfectly..
after long run i decided to do following and it is working some what i expect..
DispatchQueue.main.async {
// now update UI on main thread
self.myTableView.reloadData()
self.myTableView.setContentOffset(CGPoint(x: 0, y: -1), animated: true)
self.view.activityStopAnimating()
}
Thanks for all of your answers..i am awaiting for perfect answer..
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.