为什么我的iPhone应用程序无法调用委托方法

时间:2012-08-23 05:35:23

标签: iphone ios navigationbar titleview

我正在开发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");
}

3 个答案:

答案 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;