我正在制作一些标签,我想为他们设置自己的代理,但是当我尝试向代理发送操作时,什么都不会发生。如何为UIView子类创建自定义委托协议?
我也试过下面这个教程: link text
但它不为我工作:(
这里是我的代码: TiMTabBar.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
TiMTabBar.m :
#import "TiMTabBar.h"
...
@interface NSObject (TiMTabBarDelegate)
- (void)tabBar:(TiMTabBar *)_tabBar didSelectIndex:(int)index;
@end
@implementation TiMTabBar
@synthesize selectedItem;
@synthesize __delegate;
...
/*
- (id)init
{
...
return self;
}
*/
- (id)initWithDelegate:(id)aDelegate;
{
//[super init];
__delegate = aDelegate;
return self;
}
- (void)awakeFromNib
{
//[self init];
//[self initWithDelegate:self];
...
}
- (void)setSelectedIndex:(int)item {
selectedItem = item;
if (self.__delegate != NULL && [self.__delegate respondsToSelector:@selector(tabBar:didSelectIndex:)]) {
[__delegate tabBar:self didSelectIndex:selectedItem];
}
...
if (item == 0) {
...
} else if (item == 1) {
...
} else if (item == 2) {
...
} else if (item == 3) {
...
} else if (item == 4) {
...
} else {
...
}
}
/*
- (void)tabBar:(TiMTabBar *)_tabBar didSelectIndex:(int)index;
{
//[delegate tabBar:self didSelectIndex:index];
//if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(tabBar:didSelectIndex:)]) {
//[delegate tabBar:self didSelectIndex:selectedItem];
//}
NSLog(@"tabBarDelegate: %d",index);
}
*/
@end
The del博意门只能内部本身,而不是在任何其它文件的作用类似于:
@interface XXXController : UIViewController <TiMTabBarDelegate> {
...
...
IBOutlet TiMTabBar *tabBar;
...
}
...
@end
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工作。任何人都知道如何使这项工作?
我试了两次。我有一个使用它在一个NIB和一个代码,但他们都没有工作,他们都有代表组 – timothy5216 2010-04-19 19:03:35
有几件事要检查: *您的setToolTabBar的itemSelect方法被调用,因为你期望? *如果是,是否执行了[__delegate tabBar:self didSelectIndex:selectedItem]行? *您是否验证过委托设置为您认为的对象? (即设置一个断点并使用调试器) – 2010-04-19 19:29:24