为所有UINavigationViewController子项设置UINavigationItem.titleView = MyLogoView UIViews

时间:2016-01-18 20:16:00

标签: ios iphone xcode swift

我的问题在技术上与此SO的重复:How do I set custom navigation bar(title + titleView) for all navigation controllers and view controller?

上面链接中的基类答案是我当前的解决方案,我将在下面解释。这个解决方案的一个问题是它使我的公司徽标图像titleView消失并重新出现每一个segue,我希望通过所有导航过渡保持徽标可见。

我在UINavigationBar的中心使用公司徽标。目前,对于UINavigationViewController的任何子项UIView,我通过CTRL拖动到我的Swift UINavigationItem在Xcode 7 Storyboard中添加ChildViewController出口并始终使用相同的ID:

@IBOutlet weak var uiNavItemTitle: UINavigationItem!

然后我删除了上面Xcode生成的行,因为我MyBaseViewController继承了ChildViewController中的相同行。现在,我可以在MyBaseViewController中设置徽标一次,并且每个ChildViewController都继承自MyBaseViewController,此代码位于MyBaseViewController

@IBOutlet weak var uiNavItemTitle: UINavigationItem!

override func viewDidLoad() {
    super.viewDidLoad()

    // MARK: - UINavigationController Defaults
    uiNavItemTitle.titleView = CoreUtility.LogoForUINavBarGet()
    self.navigationController?.navigationBar.topItem?.title = "";
    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()

}

这个解决方案的问题在于,对于我的UINavigationViewController segue堆栈中的每个ChildViewController,我必须添加UINavigationItem出口并确保继承MyBaseViewController。我在导航链中更深层次的一些导航segue视图不应该真正继承此MyBaseViewController

我的解决方案的另一个问题是公司徽标消失,并在一秒钟之后重新出现每个segue到新的UIViewController

我可以为继承层次创建另一个级别是一种可能的解决方案。

但是我的UINavigationItem.titleView对于每个孩子UIViewController都是相同的公司徽标。

我是否必须为每个UIViewController添加UINavigationItem?

或者在我的AppDeletgate.application()

中是否存在“应用”等级方式,例如使用
//MARK: - UINavigationBar.appearance
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.somethingForTitleView

somethingForTitleView成为将应用程序范围的导航栏titleView设置为我的徽标视图的代码。

0 个答案:

没有答案