关闭完成块不起作用。 Swift
Dissmiss completion block doesn't work. Swift
我有 PhotoBrowser
(它继承自 UIViewController
)作为 presentedViewController
。我从 UITableViewController
开始展示它。当我点击按钮时,PhotoBrowser
显示 actionMainController
(它继承自 UIAlertController
)。我想调用另一个 UIAlertController
,当我 select actionMainController 中的一个操作并在其关闭后立即显示第二个 UIAlertController
但完成块不起作用。我想补充一点,关闭 actionMainController
成功,有效
class PhotoBrowser: SKPhotoBrowser {
// MARK: - Controllers
private var actionMainController = UIAlertController()
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - override var
override var prefersStatusBarHidden: Bool {
return true
}
// MARK: - functions
func editAvatar() {
debugPrint("removePhoto")
actionMainController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
actionMainController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
let deleteAction = UIAlertAction(title: "Delete Photo", style: .destructive) { (action) in
self.deletePhoto()
}
let takePhoto = UIAlertAction(title: "Take Photo", style: .default) { (action) in
}
let choosePhoto = UIAlertAction(title: "Choose Photo", style: .default) { (action) in
}
actionMainController.addAction(deleteAction)
actionMainController.addAction(takePhoto)
actionMainController.addAction(choosePhoto)
present(actionMainController, animated: true, completion: nil)
}
private func deletePhoto() {
actionMainController.dismiss(animated: true) {
// TODO: it
// self.showDeleteActionSheet()
}
showDeleteActionSheet()
}
private func showDeleteActionSheet() {
let deleteActionController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
deleteActionController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
let deleteAction = UIAlertAction(title: "Delete Photo", style: .destructive) { (action) in
}
deleteActionController.addAction(deleteAction)
present(deleteActionController, animated: true, completion: nil)
}
}
您的完成处理程序未被调用,因为您的警报已被解除,而您再次尝试解除警报。
actionMainController.dismiss(animated: true) {
self.showDeleteActionSheet()
}
相反,您应该在 Action 的完成处理程序上做一些工作
let deleteAction = UIAlertAction(title: "Delete Photo", style: .destructive) { (action) in
self.showDeleteActionSheet()
}
我有 PhotoBrowser
(它继承自 UIViewController
)作为 presentedViewController
。我从 UITableViewController
开始展示它。当我点击按钮时,PhotoBrowser
显示 actionMainController
(它继承自 UIAlertController
)。我想调用另一个 UIAlertController
,当我 select actionMainController 中的一个操作并在其关闭后立即显示第二个 UIAlertController
但完成块不起作用。我想补充一点,关闭 actionMainController
成功,有效
class PhotoBrowser: SKPhotoBrowser {
// MARK: - Controllers
private var actionMainController = UIAlertController()
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - override var
override var prefersStatusBarHidden: Bool {
return true
}
// MARK: - functions
func editAvatar() {
debugPrint("removePhoto")
actionMainController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
actionMainController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
let deleteAction = UIAlertAction(title: "Delete Photo", style: .destructive) { (action) in
self.deletePhoto()
}
let takePhoto = UIAlertAction(title: "Take Photo", style: .default) { (action) in
}
let choosePhoto = UIAlertAction(title: "Choose Photo", style: .default) { (action) in
}
actionMainController.addAction(deleteAction)
actionMainController.addAction(takePhoto)
actionMainController.addAction(choosePhoto)
present(actionMainController, animated: true, completion: nil)
}
private func deletePhoto() {
actionMainController.dismiss(animated: true) {
// TODO: it
// self.showDeleteActionSheet()
}
showDeleteActionSheet()
}
private func showDeleteActionSheet() {
let deleteActionController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
deleteActionController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
let deleteAction = UIAlertAction(title: "Delete Photo", style: .destructive) { (action) in
}
deleteActionController.addAction(deleteAction)
present(deleteActionController, animated: true, completion: nil)
}
}
您的完成处理程序未被调用,因为您的警报已被解除,而您再次尝试解除警报。
actionMainController.dismiss(animated: true) {
self.showDeleteActionSheet()
}
相反,您应该在 Action 的完成处理程序上做一些工作
let deleteAction = UIAlertAction(title: "Delete Photo", style: .destructive) { (action) in
self.showDeleteActionSheet()
}