指标 activity 未显示

Indicator activity not showing

我有一个代码可以在 Swift 中显示 activity indicator,但它无法正常工作。

即使 configuration func 中的所有代码都已正确加载,activity indicator 也不会出现。

代码中出了什么问题?

这是代码和图片:

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))
    }

您的indicadorDeAtividade.center不正确。 UIViewcenter 属性 使用父视图的坐标系,因此您已将 activity 指示器放置在屏幕外。

在函数configurarIndicadorDeAtividade中,替换:

indicadorDeAtividade.center = loadingView.center

与:

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