如何使用 SWRevealViewController 禁用侧边栏菜单中的交互

Posted

技术标签:

【中文标题】如何使用 SWRevealViewController 禁用侧边栏菜单中的交互【英文标题】:How to Disable Interaction in Sidebar Menu using SWRevealViewController 【发布时间】:2016-12-31 07:16:19 【问题描述】:

我按照 AppCoda.com 的侧边栏菜单教程进行操作,但遇到了问题。当用户在菜单中时,我想禁用用户交互。现在,尽管在菜单中,用户仍然可以与主屏幕进行交互。

问题截图链接: http://i.imgur.com/1gld2bY.gifv

【问题讨论】:

当前视图控制器移到一边时,可以在上面添加一个uiview,这样就不会影响任何东西。如果你想让它变暗,你也可以这样做。你在使用 SWRevealViewController 吗? 是的,我认为这可能是我想做的最好的选择。 如果你想做类似的事情,让我发布我的代码。 【参考方案1】:

将此代码放入您的 TableViewController 即菜单项控制器中。本质上,这是位于主视图后面的视图控制器。

这也会使您的主视图变暗,如果您不希望这样,请将 alpha 分量设置为 0。

let darkView = UIView()

override func viewWillAppear(_ animated: Bool) 

    darkView.addGestureRecognizer(revealViewController().tapGestureRecognizer())
    darkView.backgroundColor = UIColor.black.withAlphaComponent(0.7)
    darkView.frame = self.revealViewController().frontViewController.view.bounds
    self.revealViewController().frontViewController.view.addSubview(darkView)


override func viewWillDisappear(_ animated: Bool) 
    darkView.removeFromSuperview()

【讨论】:

【参考方案2】:

如果您使用 SWRevealViewController 作为侧边栏。使用下面的代码

func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition) 
let tagId = 4207868622

if revealController.frontViewPosition == FrontViewPosition.Right 
    let lock = self.view.viewWithTag(tagId)
    UIView.animateWithDuration(0.25, animations: 
            lock?.alpha = 0
        , completion: (finished: Bool) in
            lock?.removeFromSuperview()
        
    )
    lock?.removeFromSuperview()
 else if revealController.frontViewPosition == FrontViewPosition.Left 
    let lock = UIView(frame: self.view.bounds)
    lock.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
    lock.tag = tagId
    lock.alpha = 0
    lock.backgroundColor = UIColor.blackColor()
    lock.addGestureRecognizer(UITapGestureRecognizer(target: self.revealViewController(), action: "revealToggle:"))
    self.view.addSubview(lock)
    UIView.animateWithDuration(0.75, animations: 
            lock.alpha = 0.333
            
        )
    

注意:不要忘记在你的视图控制器中添加self.revealViewController().delegate = self,否则代理将不会被调用

【讨论】:

我有点困惑我应该把这个放在哪里 另外添加 self.revealViewController().delegate = self 会给我一个错误。它说我不能将我的视图控制器分配给 SWRevealViewControllerDelegate 类型! 在您的 viewDidLoad 方法中添加 self.revealViewController().delegate = self。以上代码在您班级的任何地方。就像方法一样

以上是关于如何使用 SWRevealViewController 禁用侧边栏菜单中的交互的主要内容,如果未能解决你的问题,请参考以下文章

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?