方法被调用,但不能正确执行

我已经从CollectionViewController – > MenuTableViewController – > ListViewController成功链接链接的委托方法。 在ListViewController扩展中,我调用changeTitleView()但它不工作。 数据,但是成功通过,因为print(title)正确打印传递的信息。 如果在ListViewController调用, changeTitle()正确执行

 class ListViewController { var navigationTitle: String? @objc func changeTitle(title: String) { let titleLabel = UILabel() let attributes: NSDictionary = [ NSAttributedStringKey.font:UIFont(name: "HelveticaNeue", size: 20)!, NSAttributedStringKey.foregroundColor: UIColor(red: 0.1137, green: 0.1137, blue: 0.149, alpha: 0.8) /* #1d1d26 */, NSAttributedStringKey.kern:CGFloat(2.0) ] let attributedTitle = NSAttributedString(string: title.uppercased(), attributes: attributes as? [NSAttributedStringKey : AnyObject]) titleLabel.attributedText = attributedTitle titleLabel.sizeToFit() self.navigationItem.titleView = titleLabel } } extension ListViewController: HandleTitleView { @objc func changeTitleView(title: String) { print(title) self.navigationTitle = title changeTitle(title: navigationTitle!) } 

附加信息:

1)我通过SWRevealController传递信息,所以不是所有的数据都在同一个导航栈中。 ListViewControllerMenuTableViewControllerCollectionViewControllerMenuTableViewController实例化,然后解散

2)我在ListViewController中创build了一个调用changeTitle()的button,它成功地更改了navigationItem.titleView所以我知道该方法的工作原理。

提前致谢

你有没有像下面那样尝试

 class ListViewController { var navigationTitle: String? { didSet{ if(navigationTitle != nil) { changeTitle(title: navigationTitle!) } } } @objc func changeTitle(title: String) { let titleLabel = UILabel() let attributes: NSDictionary = [ NSAttributedStringKey.font:UIFont(name: "HelveticaNeue", size: 20)!, NSAttributedStringKey.foregroundColor: UIColor(red: 0.1137, green: 0.1137, blue: 0.149, alpha: 0.8) /* #1d1d26 */, NSAttributedStringKey.kern:CGFloat(2.0) ] let attributedTitle = NSAttributedString(string: title.uppercased(), attributes: attributes as? [NSAttributedStringKey : AnyObject]) titleLabel.attributedText = attributedTitle titleLabel.sizeToFit() self.navigationItem.titleView = titleLabel } } extension ListViewController: HandleTitleView { @objc func changeTitleView(title: String) { print(title) self.navigationTitle = title // changeTitle(title: navigationTitle!) }` 
  @objc func changeTitle(title: String) { let titleLabel = UILabel() let attributeFontSaySomething : [String : Any] = [NSFontAttributeName : UIFont(name: "HelveticaNeue", size: 20) ?? UIFont.systemFont(ofSize: 20) ,NSForegroundColorAttributeName :UIColor(red: 0.1137, green: 0.1137, blue: 0.149, alpha: 0.8),NSKernAttributeName : CGFloat(2.0) ] var attributes = attributeFontSaySomething let attStringSaySomething = NSAttributedString(string: title.uppercased(), attributes: attributes) titleLabel.attributedText = attStringSaySomething titleLabel.sizeToFit() self.navigationItem.titleView = titleLabel } 

你可以从这个链接下载代码

链接