快速从另一个 View Controller 调用函数

标签 swift function call viewcontroller

我想从另一个 View Controller 调用函数。

这里是 pubListViewController 中的代码:它工作正常。

    override func viewDidAppear(_ animated: Bool) {
    navigationBarTitleImage(imageTitle: "IconTitle")
}

func navigationBarTitleImage(imageTitle: String) {
    // 1
    //        let nav = self.navigationController?.navigationBar

    // 2
    //        nav?.barStyle = UIBarStyle.black
    //        nav?.tintColor = UIColor.yellow

    // 3
    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
    imageView.contentMode = .scaleAspectFit

    // 4
    let image = UIImage(named: imageTitle)
    imageView.image = image

    // 5
    navigationItem.titleView = imageView
}

现在我尝试在另一个 View Controller 中调用它,如下所示,但它什么也没显示。

    override func viewDidAppear(_ animated: Bool) {
    pubListViewController().navigationBarTitleImage(imageTitle: "addTitle")
}

最佳答案

当您使用像 pubListViewController() 这样的符号时,您会调用 pubListViewController 的免费空初始化程序,它会创建 pubListViewController 类的新实例,但我敢打赌,您的屏幕流中已经有一个,因此您稍后调用的函数所做的所有更改都将应用于 pubListViewController 的不可见实例。

要解决此问题,您需要一个实际显示来自另一个 View Controller 的 pubListViewController 实例的引用

另一个 View Controller 中,您可以创建一个pubListViewController类型的属性,然后在显示另一个 View Controller 之前将其属性设置为self,并在另一个 View Controller 中的任意位置使用该属性。

class PubListViewController: UIViewController {
  func prepareForSegue(/**/){ // actually do that in the place where you showing your another viewcontroller, I don't know if you're using segues or not
    destinationViewController.parentPubListViewController = self
  }
}

class AnotherViewController: UIViewController {
  // declare property (weak and optional to avoid crashes or memory leaks if you forget to set that property from parent view controller
  weak var parentPubListViewController: PubListViewController?

  // use it anywhere you need
  parentPubListViewController?.navigationBarTitleImage(imageTitle: "addTitle")
}

关于快速从另一个 View Controller 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49206247/

相关文章:

ios - CoreData 数据库未显示在编辑器上并给出错误

ios - 如何比较两个数组并通过swift获取不同的元素

function - Azure 函数 "Host keys"不是使用 Terraform 创建的

c - 传递给函数的用户定义类型是 C 中的按值调用吗?

ios - 使用 CollectionView 删除 Core Data 中的记录

ios - 表格 View 单元格中的文本未换行到第二行

javascript - 通过 onclick 事件将 value 属性数据从 HTML 端传递到 JavaScript 函数

javascript - 将函数分配给javascript中的变量?

c - 我如何制作一个可以从 Lua 调用的 C 函数?

C#递归在返回后调用一次方法本身