IOS AMSlideMenu打开菜单回调

时间:2014-04-10 07:30:32

标签: objective-c ios7 delegates xcode5 protocols

我是IOS的新手,无法理解有关委托和协议的一些事情。 在我的项目中,我使用AMSlideMenu进行幻灯片菜单。我需要在幻灯片菜单中更新相同的数据。为此,我需要捕获openMenu回调。在幻灯片菜单的说明中,我发现了这个

 If you want to get menu's open/close callbacks, then set MainVC's delegate property, and implement protocol named 'AMSlideMenuProtocols'. 

 @optional
 - (void)leftMenuWillOpen;
 - (void)leftMenuDidOpen;
 - (void)rightMenuWillOpen;
 - (void)rightMenuDidOpen;

我试图用这段代码来捕捉回调

//myClass.h    
#import "AMSlideMenuLeftTableViewController.h"
#import "AMSlideMenuMainViewController.h"
@interface myClass : AMSlideMenuLeftTableViewController<AMSlideMenuDelegate>

@end

//myClass.m
#import "myClass.h"

@interface myClass ()

@end

@implementation myClass
-(void)leftMenuWillOpen
{
    //something
}
@end

但永远不会调用leftMenuWillOpen。我做错了什么?

3 个答案:

答案 0 :(得分:2)

要完成答案并快速参考,您需要将其添加到viewDidLoad:

self.mainSlideMenu.slideMenuDelegate = self;

答案 1 :(得分:0)

我猜你没有将代表设置到幻灯片菜单。 myClass的对象应该是AMSlideMenu对象的委托。

答案 2 :(得分:0)

Swift 2.0 兼容
这是我的情况,但我猜是一般情况:

class MainViewController: AMSlideMenuMainViewController, AMSlideMenuDelegate  {

  override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
  }

  required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
  }

  override func viewDidLoad() {
    super.viewDidLoad()
    self.leftMenu = LeftMenuViewController(nibName:"LeftMenuViewController", bundle:nil)
    self.rightMenu = nil
    self.view.backgroundColor = UIColor.whiteColor()
    self.slideMenuDelegate = self /* FOCUS HERE */
  }

  // MARK: - AMSlideMenuDelegate -

  func leftMenuWillOpen() {
    let menu = self.leftMenu as! LeftMenuViewController
    menu.centerMenuItems()
  }
}

LeftMenuViewController 是一个继承自 AMSlideMenuLeftTableViewController 的自定义类。