用另一个 UIAlertController 替换 UIAlertController
Replace UIAlertController with another UIAlertController
我有一个 Parse 注册,我有一个 UIAlertController,我希望 UIAlertController 显示一个指示器,但在注册出现错误时被另一个 UIAlertController 解雇。
我有几个注册失败的案例,所有这些都在添加带有指示器的 UIAlertController 之前工作。当注册成功并且正确关闭时,指示器警报控制器工作正常。
//create an alert controller
let pending = UIAlertController(title: "Creating New User", message: nil, preferredStyle: .Alert)
//create an activity indicator
let indicator = UIActivityIndicatorView(frame: pending.view.bounds)
indicator.autoresizingMask = .FlexibleWidth | .FlexibleHeight
//add the activity indicator as a subview of the alert controller's view
pending.view.addSubview(indicator)
indicator.userInteractionEnabled = false // required otherwise if there buttons in the UIAlertController you will not be able to press them
indicator.startAnimating()
self.presentViewController(pending, animated: true, completion: nil)
这是注册代码,有效
if signUpError == nil {
println("Sign Up Successful")
// Keep track of the installs of our app
var installation: PFInstallation = PFInstallation.currentInstallation()
installation.addUniqueObject("Reload", forKey: "channels")
installation["user"] = PFUser.currentUser()
installation.saveInBackground()
// to stop the uialertviewcontroller once sign up successful
pending.dismissViewControllerAnimated(true, completion: {
self.performSegueWithIdentifier("goToAppFromSignUp", sender: self)
})
}
这就是我卡住的地方,这只是其中一种情况,如果我能让它工作,我可以为其他人做。
else {
println("Error Sign Up")
//If email has been used for another account kPFErrorUserEmailTaken
if(signUpError!.code == 203) {
let alertController = UIAlertController(title: "Sign Up Failed", message: "Sorry! Email has been taken! ", preferredStyle: .Alert)
let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in
// ...
}
alertController.addAction(OKAction)
self.presentViewController(alertController, animated: true) {
// ...
}
}
我的想法是关闭 UIAlertController 并在完成块中显示下一个
pending.dismissViewControllerAnimated(true, completion: {
self.presentViewController(alertController, animated: true) {
// ...
}
})
但是应用程序在挂起的警报控制器(带有指示器的那个)上冻结。 已经在呈现 (null)
有什么想法吗?谢谢。
尝试关闭挂起的警报并在没有动画的情况下显示下一个警报。
pending.dismissViewControllerAnimated(false, completion: nil)
self.presentViewController(alertController, animated: false, completion: nil)
在 Apple 文档中,它指出您不应修改 UIAlertController 的视图层次结构。这可能会在以后给您带来问题,并且可能是您当前问题的一部分。
也有可能是出现一个而另一个 运行 导致了您的问题。解雇第一个,一旦完成呈现第二个,理论上应该可以解决您的问题。它挂起的事实表明正在发生其他事情。在关闭它之前,您应该停止并从视图中删除 activity 指示器。
我认为更好的方法是考虑使用 https://github.com/jdg/MBProgressHUD 之类的 HUD 来显示进度或 activity 而不是尝试将警报控制器用于非预期用途。
HUD 非常适合在等待事情发生时显示单挑进度或 activity。它有许多显示选项,包括带有标题文本的 activity。我会在您等待时显示 HUD,然后使用警报控制器显示警报。
我发现使用 HUD 看起来更好,也更容易控制。
我有一个 Parse 注册,我有一个 UIAlertController,我希望 UIAlertController 显示一个指示器,但在注册出现错误时被另一个 UIAlertController 解雇。
我有几个注册失败的案例,所有这些都在添加带有指示器的 UIAlertController 之前工作。当注册成功并且正确关闭时,指示器警报控制器工作正常。
//create an alert controller
let pending = UIAlertController(title: "Creating New User", message: nil, preferredStyle: .Alert)
//create an activity indicator
let indicator = UIActivityIndicatorView(frame: pending.view.bounds)
indicator.autoresizingMask = .FlexibleWidth | .FlexibleHeight
//add the activity indicator as a subview of the alert controller's view
pending.view.addSubview(indicator)
indicator.userInteractionEnabled = false // required otherwise if there buttons in the UIAlertController you will not be able to press them
indicator.startAnimating()
self.presentViewController(pending, animated: true, completion: nil)
这是注册代码,有效
if signUpError == nil {
println("Sign Up Successful")
// Keep track of the installs of our app
var installation: PFInstallation = PFInstallation.currentInstallation()
installation.addUniqueObject("Reload", forKey: "channels")
installation["user"] = PFUser.currentUser()
installation.saveInBackground()
// to stop the uialertviewcontroller once sign up successful
pending.dismissViewControllerAnimated(true, completion: {
self.performSegueWithIdentifier("goToAppFromSignUp", sender: self)
})
}
这就是我卡住的地方,这只是其中一种情况,如果我能让它工作,我可以为其他人做。
else {
println("Error Sign Up")
//If email has been used for another account kPFErrorUserEmailTaken
if(signUpError!.code == 203) {
let alertController = UIAlertController(title: "Sign Up Failed", message: "Sorry! Email has been taken! ", preferredStyle: .Alert)
let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in
// ...
}
alertController.addAction(OKAction)
self.presentViewController(alertController, animated: true) {
// ...
}
}
我的想法是关闭 UIAlertController 并在完成块中显示下一个
pending.dismissViewControllerAnimated(true, completion: {
self.presentViewController(alertController, animated: true) {
// ...
}
})
但是应用程序在挂起的警报控制器(带有指示器的那个)上冻结。 已经在呈现 (null)
有什么想法吗?谢谢。
尝试关闭挂起的警报并在没有动画的情况下显示下一个警报。
pending.dismissViewControllerAnimated(false, completion: nil)
self.presentViewController(alertController, animated: false, completion: nil)
在 Apple 文档中,它指出您不应修改 UIAlertController 的视图层次结构。这可能会在以后给您带来问题,并且可能是您当前问题的一部分。
也有可能是出现一个而另一个 运行 导致了您的问题。解雇第一个,一旦完成呈现第二个,理论上应该可以解决您的问题。它挂起的事实表明正在发生其他事情。在关闭它之前,您应该停止并从视图中删除 activity 指示器。
我认为更好的方法是考虑使用 https://github.com/jdg/MBProgressHUD 之类的 HUD 来显示进度或 activity 而不是尝试将警报控制器用于非预期用途。
HUD 非常适合在等待事情发生时显示单挑进度或 activity。它有许多显示选项,包括带有标题文本的 activity。我会在您等待时显示 HUD,然后使用警报控制器显示警报。
我发现使用 HUD 看起来更好,也更容易控制。