iOS - 菜单的 TableViewController 和 SWRevealViewController

iOS - TableViewController e SWRevealViewController for menu

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

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

看起来 tableview 无法识别压力按钮..我该怎么办?

revealViewController 为 nil 的最常见原因是您没有在 stroyboard 中正确连接 segues。

如果 TabViewController 不是您的故事板入口点,则在 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分开,如下图所示。(两者之间没有segue)

  1. 添加 SWRevealViewController 和菜单屏幕表视图。
  2. 接下来,按住 Control 从 SWRevealViewController 拖动到菜单视图控制器。释放按钮后,您将看到 segue selection 的上下文菜单。在这种情况下,select“显示视图控制器设置 segue”。这定义了一个自定义的 segue “SWRevealViewControllerSetSegue”。 Select segue 并在身份检查器下将其标识符更改为“sw_rear”。通过设置标识符,您告诉 SWRevealViewController 菜单视图控制器是后视图控制器。在这种情况下,侧边栏菜单将隐藏在内容视图控制器后面。
  3. 接下来,重复相同的步骤将 SWRevealViewController 与新闻视图控制器的导航控制器连接起来。同样,select 出现提示时“reveal view controller set segue”。将 segue 的标识符设置为“sw_front”。这告诉 SWRevealViewController 导航控制器是前视图控制器。
  4. 与主视图控制器的表视图控制器相同,只是 select segue as reveal view controller push。
  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 中添加此检查: 应用委托:

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