2016-04-19 93 views
0

我有一个代码,显示斯威夫特的activity indicator,但它不能正常工作。指示灯活动没有显示

activity indicator没有出现,则configuration func里面所有的代码是否正确装入后还是一样。

这是怎么回事错误的代码?

这里是代码和图像:

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 do 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 any resources that can be 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 do 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 a barra do 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 a barra do Controlador de Busca a 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 a 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)) 
    } 

enter image description here

+0

我看起来像你绑到创建它的顶部视图和纺纱活动的指标。您是否尝试移除图片中显示的灰色视图,并查看活动指示符是否在其背后?此外,为了加快发展,我会强烈建议MBProgressHUD:https://github.com/jdg/MBProgressHUD这里是视频中显示了如何将目标C代码转换成快捷:https://www.youtube.com/手表?ν= vwkOERJvuL0 –

+0

我认为正在发生的事情是这样的,但我怎样才能把'活动indicator'在装载看法?我试过'loadingView.insertSubview(indicadorDeAtividade,aboveSubview:loadingView)''但它没有工作。 – GuiDupas

回答

1

indicadorDeAtividade.center不正确。一个UIViewcenter属性使用上海华盈的坐标系中,所以您放置活动的指标的方式关闭屏幕。

在功能configurarIndicadorDeAtividade,替换:

indicadorDeAtividade.center = loadingView.center 

有:

indicadorDeAtividade.center = CGPointMake(loadingView.frame.width/2, loadingView.frame.height/2) 
+0

非常感谢Peter。有效。 – GuiDupas