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

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

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

【问题讨论】:

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

标签: ios swift 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。以上代码在您班级的任何地方。就像方法一样
    猜你喜欢
    • 2017-04-08
    • 2014-12-20
    • 2017-01-22
    • 2021-10-02
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多