iOS - TableViewController e SWRevealViewController用于菜单

时间:2017-06-27 11:41:01

标签: ios xcode uitableview swrevealviewcontroller

在我的tableview中,我在导航控制器中插入一个barbutton项目,如照片中的压力必须打开侧边菜单

enter image description here

问题是我没有打开任何菜单! 我关注此视频:https://www.youtube.com/watch?v=wXCHDP9V3aM&t=188s

看起来桌面视图无法识别按钮压力..我该怎么办?

1 个答案:

答案 0 :(得分:1)

最容易成为revealViewController为零的原因是你没有在stroyboard中正确连接segues。

如果TabViewController不是您的故事板入口点,则在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()
}

或者如果您为其他viewController呈现TabViewController,则使用此代码呈现TabViewController。

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

更新:

  1. 您需要将loginViewController和TabViewController分开,如下图所示。(两者之间没有区别)
  2. enter image description here

    1. 添加SWRevealViewController和菜单屏幕tableview。
    2. 接下来,从SWRevealViewController控制拖动到菜单视图控制器。释放按钮后,您将看到用于segue选择的上下文菜单。在这种情况下,选择“显示视图控制器设置segue”。这定义了一个自定义segue“SWRevealViewControllerSetSegue”。选择segue并在Identity检查器下将其标识符更改为“sw_rear”。通过设置标识符,您可以告诉SWRevealViewController菜单视图控制器是后视图控制器。在这种情况下,侧边栏菜单将隐藏在内容视图控制器后面。
    3. 接下来,重复相同的步骤,将SWRevealViewController与新闻视图控制器的导航控制器连接起来。再次,在提示时选择“显示视图控制器设置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") //SWRevealViewController
      self.present(main, animated: true, completion: nil)
      
    7. 登录后:要跳过登录视图,请在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()
      }