swift从另一个viewcontroller调用一个func

时间:2018-03-10 06:52:20

标签: swift function call viewcontroller

我想从另一个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")
}

1 个答案:

答案 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")
}