方法被调用,但不能正确执行
我已经从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传递信息,所以不是所有的数据都在同一个导航栈中。 ListViewController
在MenuTableViewController
, CollectionViewController
从MenuTableViewController
实例化,然后解散
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 }
你可以从这个链接下载代码
链接