视图不显示

时间:2018-10-25 02:42:13

标签: ios swift uiview swift4

我有一个警报框,接受用户输入并启动下载任务。用户单击“确定”后,我希望屏幕显示在进行下载时添加了ActivityIndi​​cator的UIView。下载成功完成,并且该功能正确打开了下一个控制器,但是,始终显示自定义视图或活动指示器。这是我的代码:

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

我尝试了setNeedsDisplaysetNeedsLayout的几次迭代,但都没有碰到运气。我也尝试过在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
}

0 个答案:

没有答案