swift - Indicator activity not showing -
i have code show activity indicator
in swift, it's not working properly.
the activity indicator
doesn't appear, after code inside configuration func
loaded correctly.
what going wrong in code?
here code , image:
import uikit class selecionapaisviewcontroller: uiviewcontroller, uitableviewdelegate, uitableviewdatasource, uisearchresultsupdating { //mark: - outlets @iboutlet weak var paisestableview: uitableview! //mark: - propriedades var paises = [paiscodigo]() var paisesfiltrado = [paiscodigo]() var controladordebusca: uisearchcontroller! var container: uiview = uiview() var loadingview: uiview = uiview() var indicadordeatividade: uiactivityindicatorview! //mark: - métodos reescritos da view override func viewdidload() { super.viewdidload() paisestableview.delegate = self paisestableview.datasource = self //carrega configuração searchcontroller configurarcontroladordebusca() //carrega indicador de atividade configurarindicadordeatividade() //dados dos países carregadadospaises() //configura comportamento da tabela configuracomportamentodatabela() } override func viewdidappear(animated: bool) { //inicia iniciaindicadordeatividade() } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } // mark: - métodos da table view data source func numberofsectionsintableview(tableview: uitableview) -> int { return 1 } func tableview(tableview: uitableview, numberofrowsinsection section: int) -> int { if controladordebusca.active { return paisesfiltrado.count } else { return paises.count } } func tableview(tableview: uitableview, cellforrowatindexpath indexpath: nsindexpath) -> uitableviewcell { let cell = tableview.dequeuereusablecellwithidentifier("paiscell", forindexpath: indexpath) let pais: paiscodigo if controladordebusca.active { pais = paisesfiltrado[indexpath.row] } else { pais = paises[indexpath.row] } cell.textlabel?.text = pais.nome + " (+" + string(pais.codigo) + ")" if pais.nome != pais.nomeingles { cell.detailtextlabel?.text = pais.nomeingles } else { cell.detailtextlabel?.text = "" } return cell } //mark: - métodos uisearchresultsupdating func updatesearchresultsforsearchcontroller(searchcontroller: uisearchcontroller) { //paisesfiltrado.removeall(keepcapacity: false) filtrarbusca(controladordebusca.searchbar.text!) } //mark: - métodos func carregadadospaises() { //carrega dados dos países let pais1 = paiscodigo(nome: "brasil", nomeingles: "brazil", codigo: 55) let pais2 = paiscodigo(nome: "united states", nomeingles: "united states", codigo: 1) let pais3 = paiscodigo(nome: "argentina", nomeingles: "argentina", codigo: 54) let pais4 = paiscodigo(nome: "australia", nomeingles: "australia", codigo: 61) paises += [pais1, pais2, pais3, pais4] //paisestableview.reloaddata() } func configurarcontroladordebusca() { //configura controlador de busca controladordebusca = uisearchcontroller(searchresultscontroller: nil) controladordebusca.searchresultsupdater = self controladordebusca.dimsbackgroundduringpresentation = false definespresentationcontext = true controladordebusca.loadviewifneeded() //configura barra controlador de busca controladordebusca.searchbar.placeholder = "search country" controladordebusca.searchbar.sizetofit() controladordebusca.searchbar.bartintcolor = navigationcontroller?.navigationbar.bartintcolor //controladordebusca.searchbar.translucent = true controladordebusca.searchbar.tintcolor = uicolor.whitecolor() //adiciona barra controlador de busca table view paisestableview.tableheaderview = controladordebusca.searchbar } func configurarindicadordeatividade() { container.frame = paisestableview.frame container.center = paisestableview.center container.backgroundcolor = uicolorfromhex(0xffffff, alpha: 0.2) loadingview.frame = cgrectmake(0, 0, 80, 80) loadingview.center = container.center loadingview.backgroundcolor = uicolorfromhex(0x444444, alpha: 0.4) loadingview.clipstobounds = true loadingview.layer.cornerradius = 10 //configura indicador de atividade indicadordeatividade = uiactivityindicatorview() indicadordeatividade.center = loadingview.center indicadordeatividade.hideswhenstopped = true indicadordeatividade.activityindicatorviewstyle = uiactivityindicatorviewstyle.whitelarge indicadordeatividade.tintcolor = uicolor.redcolor() //adiciona o indicador view container.addsubview(loadingview) loadingview.addsubview(indicadordeatividade) view.addsubview(container) indicadordeatividade.hidden = false } func iniciaindicadordeatividade() { indicadordeatividade.startanimating() } func paraindicadordeatividade() { } func configuracomportamentodatabela() { paisestableview.hidden = !indicadordeatividade.hidden paisestableview.userinteractionenabled = !paisestableview.hidden } func filtrarbusca(textodebusca: string) { //filtrar resultados de busca paisesfiltrado = paises.filter{ paiscodigo in return paiscodigo.nome.lowercasestring.containsstring(textodebusca.lowercasestring) || paiscodigo.nomeingles.lowercasestring.containsstring(textodebusca.lowercasestring) } paisestableview.reloaddata() } func uicolorfromhex(rgbvalue:uint32, alpha:double=1.0)->uicolor { //conversor de cores em hex let red = cgfloat((rgbvalue & 0xff0000) >> 16)/256.0 let green = cgfloat((rgbvalue & 0xff00) >> 8)/256.0 let blue = cgfloat(rgbvalue & 0xff)/256.0 return uicolor(red:red, green:green, blue:blue, alpha:cgfloat(alpha)) }
your indicadordeatividade.center
incorrect. center
property of uiview
uses coordinate system of superview, you've placed activity indicator way off screen.
in function configurarindicadordeatividade
, replace:
indicadordeatividade.center = loadingview.center
with:
indicadordeatividade.center = cgpointmake(loadingview.frame.width / 2, loadingview.frame.height / 2)
Comments
Post a Comment