iOS - TableViewController 和 SWRevealViewController 菜单 [英] iOS - TableViewController e SWRevealViewController for menu

查看:28
本文介绍了iOS - TableViewController 和 SWRevealViewController 菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的 tableview 中,我在 Navigation Controller 中插入了一个 barbutton 项目,如照片所示,在压力下必须打开侧边菜单

问题是我没有打开任何菜单!我关注这个视频:

  1. 添加 SWRevealViewController 和菜单屏幕表视图.
  2. 接下来,从 SWRevealViewController 控制拖动到菜单视图控制器.释放按钮后,您将看到一个用于 segue 选择的上下文菜单.在这种情况下,选择reveal view controller set segue".这定义了一个自定义转场SWRevealViewControllerSetSegue".选择 segue 并将其标识符更改为身份检查器下的sw_rear".通过设置标识符,您告诉 SWRevealViewController 菜单视图控制器是后视图控制器.在这种情况下,侧边栏菜单将隐藏在内容视图控制器后面.
  3. 接下来,重复相同的过程,将 SWRevealViewController 与新闻视图控制器的导航控制器连接起来.再次,在提示时选择reveal view controller set segue".将 segue 的标识符设置为sw_front".这告诉 SWRevealViewController 导航控制器是前视图控制器.
  4. 与 tableview 控制器到主视图控制器相同,只需选择 segue 作为显示视图控制器推送.
  5. 在所有选项卡中添加此代码.

    if (self.revealViewController() != nil) {menuButton.target = self.revealViewController()menuButton.action = #selector(SWRevealViewController.revealToggle(_:))self.view.addGestureRecognizer(revealViewController().panGestureRecognizer())}

  6. 登录后跳转到 TabViewController 使用此代码.

    let storyboard = UIStoryboard(name: "Main", bundle: nil)let main = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")//SWRevealViewControllerself.present(主要,动画:true,完成:nil)

  7. 登录后:要跳过登录视图,请在 AppDelegate 中添加此检查:应用委托:

    if (userDefaults.object(forKey:"user") != nil) {让 storyboard = UIStoryboard(name: "Main", bundle: nil)self.window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")self.window?.makeKeyAndVisible()}

In my tableview I inserted a barbutton item inside the Navigation Controller as in the photo Which at the pressure must open a side menu

The problem is that I do not open any menus! I follow this video: https://www.youtube.com/watch?v=wXCHDP9V3aM&t=188s

It looks like the tableview does not recognize the button pressure .. what can I do?

解决方案

The most convenient to be a reason for the revealViewController to be nil is you didn't connect segues correctly in stroyboard.

If TabViewController is not your storyboard entry point then add this code in AppDelegate. AppDelegate :

if (userDefaults.object(forKey:"user") != nil) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    self.window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
    self.window?.makeKeyAndVisible()
}

Or If you are presenting the TabViewController for other viewController then use this code to present TabViewController.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let main = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController") //SWRevealViewController
self.present(main, animated: true, completion: nil)

Update :

  1. You need to separate loginViewController and TabViewController as in the below image.(No segue between both)

  1. Add SWRevealViewController and Menu screen tableview.
  2. Next, control-drag from SWRevealViewController to the Menu view controller. After releasing the button, you will see a context menu for segue selection. In this case, select "reveal view controller set segue". This defines a custom segue "SWRevealViewControllerSetSegue". Select the segue and change its identifier to "sw_rear" under the Identity inspector. By setting the identifier, you tell SWRevealViewController that the menu view controller is the rear view controller. In this case, the sidebar menu will be hidden behind a content view controller.
  3. Next, repeat the same procedures to connect SWRevealViewController with the navigation controller of the news view controller. Again, select "reveal view controller set segue" when prompted. Set the identifier of the segue to "sw_front". This tells the SWRevealViewController that the navigation controller is the front view controller.
  4. same with tableview controller to main view controller just select segue as reveal view controller push.
  5. Add this code in all tabs.

    if (self.revealViewController() != nil) {
    menuButton.target = self.revealViewController()
    menuButton.action =  #selector(SWRevealViewController.revealToggle(_:))
    self.view.addGestureRecognizer(revealViewController().panGestureRecognizer())
    }
    

  6. After Login Jump to TabViewController use this code.

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let main = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController") //SWRevealViewController
    self.present(main, animated: true, completion: nil)
    

  7. After login : To skip login view add this check in AppDelegate : AppDelegate :

    if (userDefaults.object(forKey:"user") != nil) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    self.window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
    self.window?.makeKeyAndVisible()
    }
    

这篇关于iOS - TableViewController 和 SWRevealViewController 菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆