我想从另一个 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/