gpt4 book ai didi

swift - 指标事件未显示

转载 作者:行者123 更新时间:2023-11-30 10:04:43 27 4
gpt4 key购买 nike

我有一段代码可以在 Swift 中显示事件指示器,但它无法正常工作。

即使正确加载了配置函数内的所有代码,事件指示器也不会出现。

代码出了什么问题?

这是代码和图像:

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

最佳答案

您的indicadorDeAtividade.center不正确。 UIViewcenter 属性使用 super View 的坐标系,因此您已将事件指示器放置在远离屏幕的位置。

在函数configurarIndicadorDeAtividade中,替换:

indicadorDeAtividade.center = loadingView.center

与:

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

关于swift - 指标事件未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36727406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com