如何使用 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 禁用侧边栏菜单中的交互的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]