ECSlidingViewController,无法关闭菜单

3
我正在使用ECSlidingViewController来创建菜单,我有一个初始控制器、菜单页面、主页和登录页面。 在初始视图控制器中,如果用户已经认证,则显示主页,否则显示登录对话框。(使用self topViewController)
一切似乎都很正常,我的问题是当我在主页视图控制器中时,如果我点击菜单图标(我通过编程方式添加),菜单会显示出来,但如果我再次点击关闭它,什么也不会发生,菜单仍然可见。
我添加了一个NSLog,我能够看到我正在调用正确的方法。
- (IBAction)revealSidebar
{
 NSLog(@"reveal ");
    [self.slidingViewController anchorTopViewTo:ECRight];

}

但是菜单没有自动隐藏。
附上一些截图以便理解。
NSLog(@"这里 ");

我的菜单项(图标)已链接到如上所示的revealSidebar操作。我该如何将2个操作添加到同一个按钮中,一个用于显示菜单,另一个用于隐藏它?教程只使用了revealSidebar,它可以正常工作,唯一的区别是在我的情况下,图标不是通过拖放创建的,而是通过编程方式创建的。感谢您的帮助! - user714142
当您收到我提到的通知时,请在您的工具栏按钮项上调用setAction:。 - geraldWilliam
啊!我明白了!让我试试。 - user714142
在尝试您提出的答案之前,我刚发现了一些东西。在我的主控制器中,我有一个链接到外部网站,我使用UIWebView来显示该网站。在这个视图控制器中有一个返回按钮,它会关闭当前的UIWebView并将用户带回主控制器。我注意到的是,在webview被关闭后,菜单可以完美地工作。这仅在我关闭视图控制器时发生,如果我不点击任何链接,则当我单击菜单图标时,菜单从左侧滑动,但我无法关闭它。 - user714142
奇怪。我不知道为什么会发生这种情况,但我认为您无论如何都会想要交换您的栏按钮项操作。 - geraldWilliam
嗨,GeraldWilliam,我已注册以接收通知:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMenuDidShowNotification) name:SlidingViewUnderLeftWillAppear object:nil];
  • (void)handleMenuDidShowNotification:(NSNotification *)notification { [menuicon addTarget:self action:@selector(closeMenu) forControlEvents:UIControlEventTouchUpInside];
}
  • (void)closeMenu:(id)sender { [self.slidingViewController anchorTopViewTo:ECRight]; }
但是当我单击UIButton时没有任何反应,教程没有实现此功能并且运行正常 :(
- user714142
2个回答

1
ECSlidingViewController发布以下通知(其中之一):
/** Notification that gets posted when the underLeft view will appear */
extern NSString *const ECSlidingViewUnderLeftWillAppear;

/** Notification that gets posted when the underLeft view will disappear */
extern NSString *const ECSlidingViewUnderLeftWillDisappear;

您可以注册以接收这些通知,然后实现类似以下方式的处理程序方法:
- (void)handleMenuDidShowNotification:(NSNotification *)notification
{
    [self.menuItem setAction:@selector(closeMenu:)];
}

- (void)handleMenuDidHideNotification:(NSNotification *)notification
{
    [self.menuItem setAction:@selector(openMenu:)];
}

- (void)closeMenu:(id)sender
{
    [self.slidingViewController anchorTopViewTo:ECRight];
}
- (void)openMenu:(id)sender
{
    [self.slidingViewController resetTopView];
}

0

尝试升级到适当版本的ECSlidingViewController。在提问时使用的版本存在设置手势太晚的问题。这个问题已经在1.0.1版本中得到了修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接