在 swift 中获得 viewController.view 的呈现 viewController

Get the presenting viewController of viewController.view in swift

我正在尝试获取 viewController 的 viewController 视图 这个想法是这样的: 我有一个

viewController = CategoriesViewController

我正在花药中展示它的观点

viewController = HomeViewController

通过使用

CategoriesViewController.view 所以当我想到达

HomeViewController 来自 CategoriesViewController

我这样做

let vc = self.presentingViewController as? HomeViewController

但它告诉我它是零 我尝试了

.parentViewController

它正在返回

CategoriesViewController

  • CategoriesViewController 及其视图中创建回调闭包 属性。
  • 在呈现控制器之前,将闭包分配给 将 属性 的值更改为控制器中的回调 属性。
  • viewDidLoad中将闭包交给视图。
  • 调用要在呈现控制器中执行的视图中的闭包。

如果您想使用 CategoriesViewController 更改 HomeVieController 中的变量,您可以创建自己的 protocol。您可以使用协议在不同的控制器之间进行通信。

    protocol ChangeVariableProtocol {
            func changeVar(variable: Int)
        }

在协议本身中,您只能声明方法。 在您的 CategoriesViewController 中,您将像这样创建一个委托 Varibale

var changeVarDelegate: ChangeVariableProtocl?

每当您想更改 CategoriesViewController 中的变量时,您都会调用协议方法。

changeVarDelegate?.changeVar(10)

在 HomeViewController 中,您需要实现此协议并初始化 changeVarDelegate 变量。

    extension HomeViewController: ChangeVarProtocol {
        func changeVar(var: variable) {
           // Implement your own logic here
         self.valueToChange = variable
        }

并确保在实例化 CategoriesViewController 时初始化 changeVarDelegate

希望对您有所帮助!