首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导航栏在我的整个应用程序中只有一个视图

导航栏在我的整个应用程序中只有一个视图
EN

Stack Overflow用户
提问于 2018-12-06 02:36:58
回答 2查看 957关注 0票数 0

我的应用程序中有几个视图,我只想在其中一个上有一个navigationbar……我使用了一个navigationcontroller,一开始我使用的是这段代码(当时我的应用还处于起步阶段,只有2个视图)

代码语言:javascript
复制
override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
    super.viewWillAppear(animated)
}

override func viewWillDisappear(_ animated: Bool) {
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
    super.viewWillDisappear(animated)
}

它工作得很好--但是,这个应用程序变得更加复杂了--我有这些观点

代码语言:javascript
复制
lazy var orderedViewControllers: [UIViewController] = {
    return [self.newVc(viewController: "pageOne"),
            self.newVc(viewController: "pageTwo"),
            self.newVc(viewController: "pageThree"),
            self.newVc(viewController: "pageFour"),
            self.newVc(viewController: "activate")
    ]
}()

即使我为每个视图创建了一个自定义的视图控制器,这段代码也不适用。

我认为这样做的方法是将顶部的代码块放在每个视图中,但这对底部的块不起作用。本质上,我的问题是如何使用NavigationController在一个view上创建一个条形图。

EN

回答 2

Stack Overflow用户

发布于 2018-12-06 03:09:21

一种选择是:使用“基视图控制器”类来隐藏/显示导航栏,并使"pages“子类成为”基类“的子类。

代码语言:javascript
复制
import UIKit

class BaseViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }

}

class ViewController: UIViewController {

    // has buttons with
    //    Show (e.g. push)
    // segues to Settings, First, Second, Third view controllers

}

class SettingsViewController: UIViewController {

    // Settings VC is a normal UIViewController, because
    // we *want* the NavBar to remain visible

}

class FirstViewController: BaseViewController {
    @IBAction func backTapped(_ sender: Any) {
        self.navigationController?.popViewController(animated: true)
    }
}

class SecondViewController: BaseViewController {
    @IBAction func backTapped(_ sender: Any) {
        self.navigationController?.popViewController(animated: true)
    }
}

class ThirdViewController: BaseViewController {
    @IBAction func backTapped(_ sender: Any) {
        self.navigationController?.popViewController(animated: true)
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-12-06 03:13:00

您可以使用UINavigationControllerDelegate的此方法

代码语言:javascript
复制
optional func navigationController(_ navigationController: UINavigationController, 
                          willShow viewController: UIViewController, 
                          animated: Bool){
     if viewController == self."desired view controller" {
        self.isNavigationBarHidden = true
    }else{
        self.isNavigationBarHidden = false 
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53638716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档