我正在开发iPhone应用程序。我自定义了导航栏的标题视图。标题视图包含一个按钮,我还定义了支持按钮单击事件的委托方法。但是当单击该按钮时,无法执行该委托。我不知道为什么? 以下作为我的代码: UPDelegate.h
@protocol UPDelegate <NSObject>
@optional
-(void)buttonClick;
@end
TitleView.h
#import <UIKit/UIKit.h>
#import "UPDelegate.h"
@interface TitleView :UIView
@property (nonatomic, unsafe_unretained) id<UPDelegate> delegate;
-(id)initWithCustomTitleView;
@end
TitleView.m
@synthesize delegate;
-(id)initWithCustomTitleView
{
self = [super init];
if (self) {
UIButton *titleButton = [UIButton buttonWithType:UIBUttonTypeCustom];
titleButton.frame = CGRectMake(0, 0, 20, 44);
[titleButton setTitle:@"ABC" forState:UIControlStateNormal];
// add action
[titleButton addTarget:delegate action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:titleButton];
}
return self;
}
在我的ViewController中,我实现了protocal,如下所示:
MyViewController.h
@interface MyViewController : UIViewController<UPDelegate>
并在.m文件中,我写了委托方法,但不能exeucte。 MyViewController.m
-(void)buttonClick{
NSLog("click title button");
}
答案 0 :(得分:2)
您必须在delegate
课程中为您创建id<UPDelegate> delegate;
的代码示例设置titleView
。
因此,在您添加MyViewController
的{{1}}中,创建<UPDelegate>
的实例并将委托设置为自己。
所以在TitleView
使用:
MyViewController
答案 1 :(得分:1)
听起来你没有设置titleView的委托属性的值,所以发送到delegate属性的任何消息都会被忽略,因为委托是nil。
您应该确保将titleView的委托设置为MyViewController。最好的方法是使用MyViewController的viewDidLoad:
方法。
答案 2 :(得分:0)
您是否将代表设置在任何地方?因为您必须将TitleView的委托设置为MyViewController:
titleView.delegate = self;