在单个实例上调用函数?

时间:2019-07-04 05:48:17

标签: ios swift

我有一个public function delete() { \DB::beginTransaction(); $this ->photo() ->delete() ; $result = parent::delete(); \DB::commit(); return $result; } ,显示一个弹出窗口。取消弹出窗口后,我需要在tableViewController中进行动画处理。我用tableViewController来称呼它,但是它显示了一个“找到零”错误。我猜这是因为我正在实例化一个新实例,如何在现有的viewController上调用该函数?

TableViewController().test()

3 个答案:

答案 0 :(得分:2)

您可以在PopupViewController中引入一个dismiss回调,并在演示者内部实现它,即如下所示的TableViewController,并摆脱static的方法。

class PopupViewController: UIViewController {

    public var onDismiss: (() -> Void)?

   // Using dismiss callback to notify the subscriber
    override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
        super.dismiss(animated: flag, completion: self.onDismiss)
    }

  // rest of your code
}

onDismiss中实施TableViewController回调

class TableViewController {

    func showPopup() {
        let popup : PopupViewController = self.storyboard?.instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController
        popup.onDismiss = {[weak self] in
            self?.test()
        }
        self.presentOnRoot(with: popup)
    }

  // rest of your code
}

答案 1 :(得分:1)

您可以传递调用该​​函数的实例以将动画应用于

class PopupViewController {
       static func closePopup(outOfIsEditing: Bool, for view: UIViewController) {
           if outOfIsEditing == true {
               view.test()
               }
           }    
}

用法PopupViewController.closePopup(outOfIsEditing: true, for: self)

答案 2 :(得分:0)

在这种情况下,我们通常为“当前实例”创建一个静态属性。在加载了视图时分配它最有意义。应该执行以下操作:

class TableViewController: UIViewController {

    private(set) static var currentInstance: TableViewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        TableViewController.currentInstance = self
    }

}

现在您可以在任何地方打电话

TableViewController.currentInstance?.test()

请注意,这一次仅适用于1个视图控制器。如果您有多个,则最后一个将生效。

此外,如果您需要清除它,可能会导致内存泄漏。例如,如果您关闭此视图控制器,则它将对用户不可见,但仍将由属性保留。这可能是预期效果,也可能不是预期效果。如果您想自动清除它,可以使用weak属性:

private(set) static weak var currentInstance: TableViewController?