Iphone 如何为UIView子类创建自定义委托协议?

Iphone 如何为UIView子类创建自定义委托协议?,iphone,uiview,delegates,protocols,nsobject,Iphone,Uiview,Delegates,Protocols,Nsobject,我正在制作一些选项卡,我想为它们创建自己的代理,但当我尝试向代理发送操作时,什么都没有发生 我还尝试了以下教程: 但这对我不起作用:( 这是我的密码: Timtabar.h @protocol TiMTabBarDelegate; @interface TiMTabBar : UIView { id<TiMTabBarDelegate> __delegate; ... int selectedItem; ... } //- (id)

我正在制作一些选项卡,我想为它们创建自己的代理,但当我尝试向代理发送操作时,什么都没有发生

我还尝试了以下教程:

但这对我不起作用:(

这是我的密码: Timtabar.h

    @protocol TiMTabBarDelegate;

@interface TiMTabBar : UIView {
    id<TiMTabBarDelegate>  __delegate;

    ...

    int selectedItem;

    ...
}
//- (id)init;
- (id)initWithDelegate:(id)aDelegate;

- (void)setSelectedIndex:(int)item;
..

@property (nonatomic) int selectedItem;
@property(assign) id <TiMTabBarDelegate> __delegate; 
..


...

@end

@protocol TiMTabBarDelegate<NSObject>
//@optional

- (void)tabBar:(TiMTabBar *)_tabBar didSelectIndex:(int)index;

@end
委托仅在其内部工作,而不在任何其他文件中工作,如:

@interface XXXController : UIViewController <TiMTabBarDelegate> {
    ...

    ...

    IBOutlet TiMTabBar *tabBar;
    ...
}
...

@end
@接口XXX控制器:UIViewController{
...
...
IBTABBAR*tabBar;
...
}
...
@结束
XXXController.m:

#import "XXXController.h"
#import <QuartzCore/QuartzCore.h>

@implementation XXXController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self becomeFirstResponder];
    ...
    tabBar = [[TiMTabBar alloc] initWithDelegate:self];
    //tabBar.__delegate = self;
    ...
}

#pragma mark TiMTabBar Stuff

- (void)tabBar:(TiMTabBar *)_tabBar didSelectIndex:(int)index;
{
    NSLog(@"Controller/tabBarDelegate: %d",index);
}

@end
#导入“XXXController.h”
#进口
@实现xxx控制器
-(无效)viewDidLoad{
[超级视图下载];
[自我成为第一反应者];
...
tabBar=[[timtabar alloc]initWithDelegate:self];
//tabBar.\uu delegate=self;
...
}
#布拉格马克提姆塔巴语
-(void)tabBar:(timtabar*)tabBar didSelectIndex:(int)index;
{
NSLog(@“控制器/选项卡入口:%d”,索引);
}
@结束

在XXXController中,这一切似乎都不起作用。有人知道如何做到这一点吗?

看起来-在awakeFromNib中,您将委托设置为自身。因此,无论何时尝试发送委托消息,实际上都是将它们发送到Timtabar实例,而不是XXXController。

在XXXController
viewDidLoad
中er您分配并初始化一个新的
timtabar
是否将其添加到控制器的视图中?如果不是,您正在单击的视图中的选项卡栏可能是从没有委托集的nib加载的选项卡栏。

我已经尝试了两次。我在nib中使用了一个,在代码中使用了一个,但它们都不起作用,而且它们都有DELgate setA需要检查几件事:*Timtabar的setSelectedIndex:item方法是否按预期调用?*如果是,是否正在执行[\u委托选项卡:self-didSelectIndex:selectedItem]行?*是否验证委托是否设置为您认为的对象?(即设置断点并使用调试器)
#import "XXXController.h"
#import <QuartzCore/QuartzCore.h>

@implementation XXXController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self becomeFirstResponder];
    ...
    tabBar = [[TiMTabBar alloc] initWithDelegate:self];
    //tabBar.__delegate = self;
    ...
}

#pragma mark TiMTabBar Stuff

- (void)tabBar:(TiMTabBar *)_tabBar didSelectIndex:(int)index;
{
    NSLog(@"Controller/tabBarDelegate: %d",index);
}

@end