use*_*356 13 user-interaction uiviewcontroller ios swrevealviewcontroller
我需要在显示后视图时禁用前视图上的用户交互.发现其他人问同样的事情,但无法真正理解在哪里或如何实现我见过的代码.
例如:我从链接中找到了此代码,
- (void)revealController:(SWRevealViewController *)revealController
willMoveToPosition:(FrontViewPosition)position {
if(position == FrontViewPositionLeft) {
self.view.userInteractionEnabled = YES;
} else {
self.view.userInteractionEnabled = NO;
}
}
- (void)revealController:(SWRevealViewController *)revealController
didMoveToPosition:(FrontViewPosition)position {
if(position == FrontViewPositionLeft) {
self.view.userInteractionEnabled = YES;
} else {
self.view.userInteractionEnabled = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
还发现其他一些链接
我有这个代码,但不确定插入此代码的正确位置.我已经尝试在我的前/后视图中添加它,并且在SWRevealViewController方法中也没有成功
感谢有人能指出我正确的方向.
小智 52
我最近提出了一个我想分享的解决方案(抱歉,如果它迟到了2个月).
要在菜单打开时禁用前视图上的用户交互,我在MenuViewController上添加了以下代码:
在viewWillAppear上:
[self.revealViewController.frontViewController.view setUserInteractionEnabled:NO];
Run Code Online (Sandbox Code Playgroud)
并在viewWillDisappear上:
[self.revealViewController.frontViewController.view setUserInteractionEnabled:YES];
Run Code Online (Sandbox Code Playgroud)
这将禁用前视图控制器上的所有用户交互,这意味着关闭菜单的滑动/轻击手势也将被禁用.
现在,我创建了一个ParentViewController,并使所有视图控制器(菜单项)成为它的子类.
在我的viewDidLoad上,我输入以下代码:
SWRevealViewController *revealController = [self revealViewController];
[revealController panGestureRecognizer];
[revealController tapGestureRecognizer];
Run Code Online (Sandbox Code Playgroud)
如果此时运行您的应用程序,则可能会出现Tap Gesture工作(点击前视图将关闭菜单),但不是Pan Gesture.我不确定为什么会这样,但是为了使滑动手势能够关闭你的菜单,在MenuViewController中添加以下代码:
在viewWillAppear上:
[self.revealViewController.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
Run Code Online (Sandbox Code Playgroud)
总结一下,这就是你需要的:
在您的MenuViewController上:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.revealViewController.frontViewController.view setUserInteractionEnabled:NO];
[self.revealViewController.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
}
-(void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.revealViewController.frontViewController.view setUserInteractionEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)
在菜单项的视图控制器上(您可以为所有菜单项创建一个ParentViewController):
-(void)viewDidLoad {
[super viewDidLoad];
SWRevealViewController *revealController = [self revealViewController];
[revealController panGestureRecognizer];
[revealController tapGestureRecognizer];
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
xun*_*xun 13
我已经使用另一种方法来实现相同的结果,不确定它是否有帮助.
将SWRevealViewControllerDelegate分配给AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
SWRevealViewController* reveal = (SWRevealViewController*)self.window.rootViewController;
reveal.delegate = self;
// other bootstrapping code
}
Run Code Online (Sandbox Code Playgroud)
然后在委托方法-(void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position中如下:
-(void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position
{
if(position == FrontViewPositionLeft){
[revealController.frontViewController.view setUserInteractionEnabled:YES];
[revealController.frontViewController.revealViewController tapGestureRecognizer];
}else{
[revealController.frontViewController.view setUserInteractionEnabled:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
更新:添加此行[revealController.frontViewController.revealViewController tapGestureRecognizer]以在点击frontviewcontroller时关闭显示的控制器
Swift版本到@hardluckbaby答案:
在MenuViewController(后视图控制器)中:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.revealViewController().frontViewController.view.userInteractionEnabled = false
self.revealViewController().view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.revealViewController().frontViewController.view.userInteractionEnabled = true
}
Run Code Online (Sandbox Code Playgroud)
在FrontViewController中(您可以像@hardluckbaby所说的那样为所有前视图控制器创建一个ParentViewController):
override func viewDidLoad() {
super.viewDidLoad()
if let revealController = self.revealViewController() {
revealController.panGestureRecognizer()
revealController.tapGestureRecognizer()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12721 次 |
| 最近记录: |