首先,当解雇视图的完成块被执行时?是用户看到视图被解除之后还是之前?
因为我有这段代码在完成块内部用一条消息祝酒,但是在这个视图被解除之后再也看不到吐司了。
self.dismiss(animated: true, completion: {
self.view.makeToast(message: "Employee has been assigned successfully.", duration: 2.0, position: HRToastPositionCenter as AnyObject, title: "Succeeded!")
})
我想要的是用户在视图完全解散时可以看到吐司吗?
怎么做?
答案 0 :(得分:4)
您可以将事件从呈现的控制器委托给父母并在那里处理。
在EmployeePickerViewController中(或者调用你的模态控制器):
@protocol EmployeePickerDelegate {
func employeeAssigned()
}
class EmployeePickerViewController {
weak delegate: EmployeePickerDelegate!
}
完成员工分配后,只需致电委托方法:
delegate?.employeeAssigned()
当您以模态方式呈现时,在MainViewController中:
employeePicker.delegate = self
present(employeePicker, animated: true, completion: nil)
在下面的MainViewController中:
extension MainViewController: EmployeePickerDelegate {
func employeeAssigned {
dismiss(animated: true, completion: {
self.view.makeToast(message: "Employee has been assigned successfully.", duration: 2.0, position: HRToastPositionCenter as AnyObject, title: "Succeeded!")
})
}
}
答案 1 :(得分:1)
对于UIViewController.dismiss(动画:完成:)
在viewDidDisappear(_ :)方法之后调用完成处理程序 在显示的视图控制器上被调用。
对于UIViewController.present(_:animated:completion:)
viewDidAppear(_ :)方法是 在显示的视图控制器上调用。
如果您不知道那是什么时候,这是UIViewController加载,显示和消失方法的顺序
通常我们初始化数据对象和控件。它将创建所有 该视图的所有控件/数据对象的必需内存。即 在上述情况下,anotherView和btnView会保持相同 整个生命周期的内存地址。
在将视图添加到Windows的视图层次结构之前调用。所以 是更新ViewController数据的理想选择。
将视图添加到Windows的视图层次结构后调用。
在视图从Windows的视图层次结构中删除之前调用。
从Windows的视图层次结构中删除视图后调用。
答案 2 :(得分:0)
你正在呼唤自我解雇,因此每一个参考都将是dealloc。我想你的self.view
不再存在了。
答案 3 :(得分:0)
在取消View Controller后执行完成块。这意味着您的视图不再显示在屏幕上。我想你想在那个视图里面呈现吐司,这是不可能的,因为它不在屏幕上。
答案 4 :(得分:0)
吐司将显示在您被解雇的视图中。由于视图消失了,你不会看到它的吐司。您可能希望在解除视图后显示的以下屏幕中显示祝酒词。
答案 5 :(得分:0)
也许可以更轻松地在窗口上而不是特定视图上显示吐司面包?
UIApplication.shared.keyWindow?.makeToast(message: "Employee has been assigned successfully.", duration: 2.0, position: HRToastPositionCenter as AnyObject, title: "Succeeded!")