我有UINavigationController
的自定义委托类。
目前我在UIBarButtonItems
。
我必须为每个BarItem定义@Selector
。
到目前为止 我为每个条形项定义选择器,如下所示:
SEL selector = (menu == MyMenu) ? @selector(leftSelected:) : @selector(rightSelected:);
这是完美的,因为它们是我的委托类中的本地方法所以没有问题。
但有一点我需要将我的委托方法声明为@Selector,因为它在其他viewcontroller中定义。
这里我必须将我的委托方法定义为选择器。
SEL selector = (menu == MenuLeft) ? @selector(leftMenuSelected:) : @selector(righttMenuSelected:);
if (menu == MenuTwo) {
selector = @selector(arrowMenuSelectedOut);
}
if ( menu == MenuTwo ){
UIImage *image = [UIImage imageNamed:MENU_ARROW];
UIBarButtonItem *btn= [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:self action:selector];
btn.imageInsets = UIEdgeInsetsMake(0, 0, 0, -25.0);
return btn;
}
else
{
UIImage *image = [UIImage imageNamed:MENU_IMAGE];
return [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:selector];
}
这是我的委托方法。
@protocol myNavigationViewControllerDeleget<NSObject>
- (void)arrowMenuSelectedOut;
@end
放在其他viewcontroller中。
- (void)arrowMenuSelectedOut
{
NSLog(@"button press");
}
我希望在按下按钮时使用此arrowMenuSelectedOut方法作为同一代理类的选择器。
答案 0 :(得分:3)
如果你想给代表打电话,请试试这个。
[self.mydelegate arrowMenuSelectedOut];
或在你的情况下
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:self.mydelegate action:@selector(arrowMenuSelectedOut)];
还检查你是否正确定义了你的委托它不应该是零。 试试这个
self.mydelegate=self;
答案 1 :(得分:2)
根据您在评论中提出的错误(它们应该在问题中),问题是您在创建按钮时传递了错误的target
。
变化:
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:self action:selector];
为:
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:self.mydelegate action:selector];
唯一改变的是target
参数值。