解除视图的完成块何时执行?迅速

Ziz*_*zoo 4 iphone ios swift

首先,什么时候执行解除视图的完成块?是在用户看到视图被撤消之后还是之前?

因为我有这段代码用在完成块内的消息进行祝酒,但是在取消该视图后再也看不到祝酒。

       self.dismiss(animated: true, completion: {
       self.view.makeToast(message: "Employee has been assigned successfully.", duration: 2.0, position: HRToastPositionCenter as AnyObject, title: "Succeeded!")
})
Run Code Online (Sandbox Code Playgroud)

我要的是,当视图完全消失时,用户可以看到吐司吗?

这该怎么做 ?

ale*_*nik 6

您可以将事件从显示的控制器委派给父级并在那里进行处理。

在EmployeePickerViewController中(或任何称为模式控制器的地方):

@protocol EmployeePickerDelegate {
    func employeeAssigned()
}

class EmployeePickerViewController {
    weak delegate: EmployeePickerDelegate!
}
Run Code Online (Sandbox Code Playgroud)

员工分配完成后,只需调用代表的方法即可:

delegate?.employeeAssigned()
Run Code Online (Sandbox Code Playgroud)

在MainViewController中以模态显示时:

employeePicker.delegate = self
present(employeePicker, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

在下面的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!")
       })
   }
}
Run Code Online (Sandbox Code Playgroud)


Dam*_*rot 0

您正在对 self 调用解雇,因此对它的每个引用都将被释放。我猜你的self.view已经不存在了。