1

我正在开发 iPhone 应用程序。我自定义了导航栏的标题视图。标题视图包含一个按钮,我还定义了委托方法来支持按钮单击事件。但是当点击按钮时,委托不能被执行。我不知道为什么?下面是我的代码:UPDelegate.h

@protocol UPDelegate <NSObject>
@optional
-(void)buttonClick;
@end

标题视图.h

#import <UIKit/UIKit.h>
#import "UPDelegate.h"
@interface TitleView :UIView
@property (nonatomic, unsafe_unretained) id<UPDelegate> delegate;
-(id)initWithCustomTitleView;
@end

标题视图.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 中,我实现了如下协议:

MyViewController.h

@interface MyViewController : UIViewController<UPDelegate>

在 .m 文件中,我编写了委托方法,但无法执行。我的视图控制器.m

-(void)buttonClick{
    NSLog("click title button");
}
4

3 回答 3

2

您必须从您在班级delegate中创建的代码示例中设置您的 , 。id<UPDelegate> delegate;titleView

因此,在MyViewController您添加的地方<UPDelegate>,创建一个实例TitleView并将委托设置为 self.

所以在你的MyViewController使用中:

 TitleView*titleView=[[TitleView alloc]init];
 titleView.delegate=self;
于 2012-08-23T05:47:57.213 回答
1

听起来您还没有设置 titleView 的委托属性的值,因此发送到委托属性的任何消息都将被忽略,因为委托为零。

您应该确保将 titleView 的委托设置为您的 MyViewController。执行此操作的最佳位置很可能在 MyViewController 的viewDidLoad:方法中。

于 2012-08-23T05:44:16.717 回答
0

您是否将委托设置在任何地方?因为您必须将 TitleView 的委托设置为 MyViewController:

titleView.delegate = self;
于 2012-08-23T05:46:29.367 回答