如何在 UITableViewController 中显示 UIActivityIndicatorView?
How to show an UIActivityIndicatorView whitin UITableViewController?
我是 iOS 开发的初学者,我对如何显示 UIActivityIndicatorView 有疑问。
这是我的结构:
我有一个 UITabBarController 作为 root VC。
在第一个指南中的这个 TabBarController 中,我有一个 UITableViewController
在 TableView 中,我做了一个 REST 请求(此时,一个假请求)。
我想要什么?
当我启动应用程序时,会加载 TableView 并完成申请。
在提出请求时,我想显示 UIActivityIndicatorView。
我的问题是显示这个 ActivityIndicatorView :(
我的代码
MainViewController (root VC)
import UIKit
class MainViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
setupTabBarItems()
}
private func setupTabBarItems() {
let items: [String] = ["Home", "Carrinho", "Categorias", "Conta"]
let homeVC = HomeTableViewController()
let carrinhoVC = UIViewController()
let categoriasVC = UIViewController()
let contaVC = UIViewController()
let tabBarList = [homeVC, carrinhoVC, categoriasVC, contaVC]
for i in 0..<4 {
tabBarList[i].tabBarItem = UITabBarItem(title: items[i], image: UIImage(named: items[i]), selectedImage: UIImage(named: items[i]))
}
viewControllers = tabBarList
}
}
HomeTableViewController(table 视图)
import UIKit
class HomeTableViewController: UITableViewController {
let progressView: UIActivityIndicatorView = {
let p = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
p.backgroundColor = .black
p.translatesAutoresizingMaskIntoConstraints = false
p.startAnimating()
return p
}()
override func viewDidLoad() {
super.viewDidLoad()
// **the method is called here**
setupIndicatorView()
/* others methods */
}
private func setupIndicatorView() {
guard let window = UIApplication.shared.keyWindow else {return}
window.addSubview(progressView)
window.bringSubview(toFront: progressView)
// function to add constraints (is an extension of UIView)
window.constraint(pattern: "H:|[v0]|", views: progressView)
window.constraint(pattern: "V:|[v0]|", views: progressView)
}
/* other methods */
有什么建议吗?
将progressView直接添加到tableView中:
private func setupIndicatorView() {
self.view.addSubview(progressView)
progressView.center = self.view.center // or instead use autolayout if you prefer it
}
我是 iOS 开发的初学者,我对如何显示 UIActivityIndicatorView 有疑问。
这是我的结构:
我有一个 UITabBarController 作为 root VC。 在第一个指南中的这个 TabBarController 中,我有一个 UITableViewController 在 TableView 中,我做了一个 REST 请求(此时,一个假请求)。
我想要什么?
当我启动应用程序时,会加载 TableView 并完成申请。 在提出请求时,我想显示 UIActivityIndicatorView。
我的问题是显示这个 ActivityIndicatorView :(
我的代码
MainViewController (root VC)
import UIKit
class MainViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
setupTabBarItems()
}
private func setupTabBarItems() {
let items: [String] = ["Home", "Carrinho", "Categorias", "Conta"]
let homeVC = HomeTableViewController()
let carrinhoVC = UIViewController()
let categoriasVC = UIViewController()
let contaVC = UIViewController()
let tabBarList = [homeVC, carrinhoVC, categoriasVC, contaVC]
for i in 0..<4 {
tabBarList[i].tabBarItem = UITabBarItem(title: items[i], image: UIImage(named: items[i]), selectedImage: UIImage(named: items[i]))
}
viewControllers = tabBarList
}
}
HomeTableViewController(table 视图)
import UIKit
class HomeTableViewController: UITableViewController {
let progressView: UIActivityIndicatorView = {
let p = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
p.backgroundColor = .black
p.translatesAutoresizingMaskIntoConstraints = false
p.startAnimating()
return p
}()
override func viewDidLoad() {
super.viewDidLoad()
// **the method is called here**
setupIndicatorView()
/* others methods */
}
private func setupIndicatorView() {
guard let window = UIApplication.shared.keyWindow else {return}
window.addSubview(progressView)
window.bringSubview(toFront: progressView)
// function to add constraints (is an extension of UIView)
window.constraint(pattern: "H:|[v0]|", views: progressView)
window.constraint(pattern: "V:|[v0]|", views: progressView)
}
/* other methods */
有什么建议吗?
将progressView直接添加到tableView中:
private func setupIndicatorView() {
self.view.addSubview(progressView)
progressView.center = self.view.center // or instead use autolayout if you prefer it
}