ios - 视图不显示
问题描述
我有一个警报框,它接受用户输入并启动下载任务。用户单击“确定”后,我希望屏幕显示一个 UIView,我在下载时添加了一个 ActivityIndicator。下载成功并且该函数正确打开了下一个控制器,但是,自定义视图和活动指示器永远不会显示。这是我的代码:
private func getKeyFromAlert() {
let alert = UIAlertController(title: "Enter Key", message: "Enter your text key below. If you want to scan it instead, click \"Scan Key.\" ", preferredStyle: .alert)
alert.addTextField { (textField) in
let attribString = NSAttributedString(string: "Enter your app code here")
textField.attributedPlaceholder = attribString
}
let scanAction = UIAlertAction(title: "Scan Key", style: .default) { _ in
self.openSettingsForApp()
}
let okAction = UIAlertAction(title: "OK", style: .default) { _ in
let textField = alert.textFields![0]
if let text = textField.text {
let encoded = text.toBase64()
let status = APIKeychain.storeToken(encoded)
if !status {
self.displayAlertForBadKeychain(useCamera: false)
} else {
self.addLoader()
self.dismissSetup()
}
} else {
let _ = APIKeychain.storeToken("")
self.addLoader()
self.dismissSetup()
}
}
alert.addAction(scanAction)
alert.addAction(okAction)
show(alert, sender: nil)
}
我用来显示 UIView 的有问题的函数是addLoader()
代码addLoader
:
private func addLoader() {
let frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height)
let loaderView = UIView(frame: frame)
loaderView.alpha = 1.0
loaderView.backgroundColor = UIColor.white
let activitySpinner: UIActivityIndicatorView = UIActivityIndicatorView(frame: loaderView.frame)
activitySpinner.center = loaderView.center
activitySpinner.hidesWhenStopped = false
activitySpinner.style = .whiteLarge
activitySpinner.startAnimating()
loaderView.addSubview(activitySpinner)
self.view.addSubview(loaderView)
self.view.layoutIfNeeded()
}
我已经尝试了几次迭代setNeedsDisplay
并且setNeedsLayout
没有运气。我也尝试过在DispatchQueue.main.async
没有任何影响的情况下明确声明这一点。
编辑
我添加了下面的代码dismissSetup()
private func dismissSetup() {
let dispatchGroup = DispatchGroup()
dispatchGroup.enter()
DispatchQueue.global(qos: .background).async {
if self.updateDatabase {
//This will start the download process
let _ = WebDataFetcher(dataStack: self.dataStack)
}
dispatchGroup.leave()
}
dispatchGroup.wait()
let mainSB = UIStoryboard(name: "UserInputs", bundle: nil)
let mainVC = mainSB.instantiateViewController(withIdentifier: "userInputs")
appDelegate.window?.rootViewController = mainVC
}
解决方案
推荐阅读
- django - Django Aurora RDS 事务读取不一致
- php - 当我发送带有空输入文件的电子邮件时,我得到一个空的 tmp 文件
- java - Mongock 失败:NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory
- typescript - 根据布尔变量更新 A-Frame 中的事件侦听器
- tensorflow - 神经元网络中张量的关系
- outlook-addin - Outlook 加载项中的私有访问复选框
- angular - 如何在下拉列表中输入国家代码,而不是在下拉列表中滚动国家代码?
- javascript - 在gridjs中显示javascript函数的返回值
- javascript - 无法从调用的自定义事件中设置 Vue JS 数据变量
- javascript - 如果页面刷新/重新加载,提示仅触发一次并存储值