是否可以从协议扩展名访问navigationItem?例如,如果我要将以下代码放入协议扩展中:

let customTitleView = UIView() // some custom view
navigationItem.titleView = customTitleView


但是,这会出现一个错误,说明navigationItem是一个无法解析的标识符,即它无法检测到它。我猜这是因为它不是UIViewController的子类。是否有从协议扩展中获取navigationItem的替代方法?

最佳答案

这样的事情行吗?

protocol NavigationBarStyleable {
    var titleView: UIView { get }
    func style()
}

extension NavigationBarStyleable where Self: UIViewController {
    var titleView: UIView {
        return UIView()
    }

    func style() {
        navigationItem.titleView = titleView
    }
}

关于ios - 从协议(protocol)扩展访问navigationItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35565263/

10-10 19:55