我是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
。我做错了什么?
答案 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 的自定义类。