Вид не отображается - PullRequest
       20

Вид не отображается

0 голосов
/ 25 октября 2018

У меня есть окно с предупреждением, которое принимает пользовательский ввод и запускает задачу загрузки.После того, как пользователь нажмет «ОК», я хочу, чтобы на экране отображался 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
}
...