ios - Run Activity Indicator across Views -
i using plugin: https://github.com/icanzilb/swiftspinner/
to show acitvity indicator, easy:
swiftspinner.show("loading data")
however, have view getting from:
performseguewithidentifier("viewc1segue", sender: self)
when clicked on table view cell.
the problem is, when go new view, there initial blank white screen because data loaded via alamofire , takes few moments load.
is there way load activity spinner on 1 view, , let views change undeneath it, when use .hide() on new view spinner disappear?
there dilemma:
i have tried adding swift spinner onto new viewdidload. works, however, of content loaded under viewdidappear function. add function, spinner fails load.
ok, have question:
what best way not show blank view @ beginning until data loads?
if want have spinner on several views, create new loadingviewcontroller , nib it, set it's backgroundcolor
transparent, show loadingviewcontroller on current context (or on full screen) , display spinner on loadingviewcontroller.
this way can show spinner on view , dismiss view. code below.
create loadingviewcontroller , delegate it:
protocol loadingviewcontrollerdelegate { func didfinishloading(controller: loadingviewcontroller) } class loadingviewcontroller: uiviewcontroller { var delegate: loadingviewcontrollerdelegate? = nil override func viewdidload() { // spinner code here } // delegate function, should fired when loading done. func finished() { if self.delegate != nil { self.delegate?.didfinishloading(self) } } }
in first viewcontroller, display loadingviewcontroller:
let loading = loadingviewcontroller(nibname: "loadingviewcontroller", bundle: nil) loading.modaltransitionstyle = .crossdissolve loading.modalpresentationstyle = .overfullscreen presentviewcontroller(loading, animated: true, completion: nil)
in second viewcontroller, implement method receive loadingviewcontroller:
var loading: loadingviewcontroller? = nil
again in first viewcontroller, send data on second:
override func prepareforsegue(segue: uistoryboardsegue, sender: anyobject?) { if segue.identifier == "viewc1segue" { let destination = segue.destinationviewcontroller as! secondviewcontroller destination.loading = self.loading } }
and in second viewcontroller, conform loadingviewcontrollerdelegate
, set delegate:
class secondviewcontroller: uiviewcontroller, loadingviewcontrollerdelegate { ... override func viewdidload() { loading.delegate = self } ... // mark: - loadingviewcontrollerdelegate func didfinishloading(controller: loadingviewcontroller) { controller.dismissviewcontrolleranimated(true, completion: nil) } }
and in alamofire call, run following upon completion:
loading.finished()
Comments
Post a Comment