我想从另一个viewcontroller调用一个func。
这里有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
}
现在我尝试在另一个viewcontroller中调用它,如下所示,但它没有显示任何内容。
override func viewDidAppear(_ animated: Bool) {
pubListViewController().navigationBarTitleImage(imageTitle: "addTitle")
}
答案 0 :(得分:0)
当您使用pubListViewController()
之类的符号时,您调用pubListViewController
的免费空初始值设定项,它会创建类pubListViewController
的新实例,但您的屏幕流中已经有一个下注,因此您稍后调用的函数所做的所有更改都将应用于pubListViewController
的不可见实例。
要解决此问题,您需要一个实际显示来自另一个viewcontroller的pubListViewController
实例的引用
在another viewcontroller
中,您可以创建pubListViewController
类型的属性,然后在显示another viewcontroller
之前将其属性设置为self
,并在another viewcontroller
中的任何位置使用该属性{1}}。
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")
}