当完成阻止视图被执行时?迅速

时间:2016-10-09 10:25:19

标签: ios iphone swift

首先,当解雇视图的完成块被执行时?是用户看到视图被解除之后还是之前?

因为我有这段代码在完成块内部用一条消息祝酒,但是在这个视图被解除之后再也看不到吐司了。

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

我想要的是用户在视图完全解散时可以看到吐司吗?

怎么做?

6 个答案:

答案 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(_ :)方法之后调用完成处理程序   在显示的视图控制器上被调用。

Source

对于UIViewController.present(_:animated:completion:)

  

viewDidAppear(_ :)方法是   在显示的视图控制器上调用。

Source


如果您不知道那是什么时候,这是UIViewController加载,显示和消失方法的顺序

  1. viewDidLoad
  

通常我们初始化数据对象和控件。它将创建所有   该视图的所有控件/数据对象的必需内存。即   在上述情况下,anotherView和btnView会保持相同   整个生命周期的内存地址。

  1. viewWillAppear
  

在将视图添加到Windows的视图层次结构之前调用。所以   是更新ViewController数据的理想选择。

  1. viewDidAppear
  

将视图添加到Windows的视图层次结构后调用。

  1. viewWillDisappear
  

在视图从Windows的视图层次结构中删除之前调用。

  1. viewDidDisappear
  

从Windows的视图层次结构中删除视图后调用。

Source

答案 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!")