【问题标题】:SWRevealViewController with NavigationController - Swift 3带有 NavigationController 的 SWRevealViewController - Swift 3
【发布时间】:2017-05-18 15:02:16
【问题描述】:

我想制作一个应用,其中我的导航栏出现在所有页面上。当我单击任一侧菜单行(通过SWRevealViewController 完成)时,我希望打开的页面顶部有一个导航栏。在下图中,我想要与带有“菜单”标签的页面上的 HomeViewController 相同的导航栏。我怎样才能做到这一点?请帮忙。我是 iOS 新手。我在 Xcode 8 和 Swift 3 中这样做。

编辑:我想要这样的东西: 我已将侧菜单按钮放在显示视图控制器上。我可以在运行时在前视图控制器上看到它,但是如何连接revealviewcontroller的目标和动作,以便打开侧面菜单?如果这样做了,那么我在“菜单”标签页上的导航控制器问题将自动解决

【问题讨论】:

  • SlideBar 的根视图控制器必须保留在 UINavigation 控制器中。
  • 我怎样才能做到这一点?
  • 放置 NavigationController -> RevealController -> 前端(家庭控制器)-> 后端(SideMenuController)
  • @Amanpreet 请检查已编辑的问题
  • @Dia 请检查答案。可能是你想要的。

标签: ios swift uinavigationcontroller swrevealviewcontroller


【解决方案1】:

您需要将ViewControllers 的所有起点添加到它们自己的NavigationController 中,因此在这种情况下,您需要在NavigationController 中嵌入具有菜单标签的ViewController 并制作边菜单转到NavigationController 而不是ViewController

希望我的回答对你有帮助

【讨论】:

  • 请检查已编辑的问题。我想要主视图控制器上的相同导航栏以及具有“菜单”标签的视图控制器
  • 您可以从 uiviewcontroller 'BaseViewController' 创建一个子类,并在它的 viewDidLoad 中以编程方式将按钮添加到导航栏,并且您将从菜单中显示的所有视图控制器都继承自 'BaseViewController' 并嵌入它们在导航控制器中
  • 我现在将为您添加一个包含详细信息的新答案
【解决方案2】:

您还需要为 sabe bar Controller 添加Navigation Controller 请按照以下步骤操作:

选择侧边栏viewcontroller > go to Editior menu > Embed in > Click Navigation Controller

【讨论】:

  • 请检查已编辑的问题。我想要主视图控制器上的相同导航栏以及具有“菜单”标签的视图控制器
  • 您想为侧边栏使用带有“菜单”标题的相同菜单导航栏?
  • 是的,我想在“菜单”标题页和 HomeViewController 上使用相同的导航栏
【解决方案3】:

1) 创建一个名为 'BaseViewController' 的新 ViewController 类

2) 在 BaseViewController viewDidLoad 中添加以下代码并更改图像名称和目标并添加菜单的左按钮

  let btn1 = UIButton(type: .custom)
    btn1.setImage(UIImage(named: "imagename"), for: .normal)
    btn1.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    btn1.addTarget(self, action: #selector(Class.Methodname), for: .touchUpInside)
    let item1 = UIBarButtonItem(customView: btn1)

    let btn2 = UIButton(type: .custom)
    btn2.setImage(UIImage(named: "imagename"), for: .normal)
    btn2.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    btn2.addTarget(self, action: #selector(Class.MethodName), for: .touchUpInside)
    let item2 = UIBarButtonItem(customView: btn2)  

    self.navigationItem.setRightBarButtonItems([item1,item2], animated: true)

3) 使您将从侧边菜单中显示的 viewControllers 像带有菜单标签的 viewControllers 继承自 BaseViewController 并在它的 viewDidLoad 中调用 super.viewDidLoad()

4) 将您将从侧边菜单中显示的 viewController 嵌入到 navigationController 中

【讨论】:

    【解决方案4】:

    假设菜单的出口是btn_Menu。在控制器的视图中确实加载了我以编程方式设置栏按钮的操作和目标。

     btn_Menu.target = self.revealViewController()
     btn_Menu.action = #selector(SWRevealViewController.revealToggle(_:))
    

    看看你需要的这个图像结构。抱歉不是很清楚,但也许可以解决您的问题:

    【讨论】:

    • 我的问题是在哪里创建该按钮的出口?由于该控制器的类设置为 SWRevealViewController
    • 将按钮放在主视图控制器上。在家里做插座。
    • 我在最初的问题中已经这样做了,但它没有达到在“菜单”标签页上获取导航栏的目的
    • RevealController 只是用来设置前后。在这里,我们将后部作为侧边菜单,前部是主页。当您运行应用程序时,您会看到主页,因为我们将其设置为显示的前面。您检查了吗appcoda.com/sidebar-menu-swift
    • 是的,这行得通。我只是担心导航栏。该怎么做?
    【解决方案5】:

    使用Container View 可能会有所帮助。

    将中间的 UIView (Content) 替换为 Container View,该容器可以是 UINavigationController。为了避免有 2 NavigationBars,您可以隐藏 ContainerView 的 NavigationBar。

    蓝色突出显示的视图是 Controller 中的 ContainerView,它正在实现 SideMenu

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 2016-03-05
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      相关资源
      最近更新 更多