如何调用委托方法作为相同委托类中的选择器
问题描述:
我有我的自定义委托类UINavigationController
。如何调用委托方法作为相同委托类中的选择器
目前我面临的问题在我的UIBarButtonItems
。
我必须为每个BarItem定义@Selector
。
到目前为止 我对这样的每个栏项目定义选择:
SEL selector = (menu == MyMenu) ? @selector(leftSelected:) : @selector(rightSelected:);
,因为他们是当地的方法在我的委托类,所以没有问题正在完善。
但有一点我需要声明我的委托方法为@Selector,因为它在其他视图控制器中定义。
这里我必须将我的委托方法定义为选择器。
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
它放置在其他视图控制器中。
- (void)arrowMenuSelectedOut
{
NSLog(@"button press");
}
我想使用此箭头MenuSelectedOut方法作为选择器从按钮按下相同的委托类。
答
如果您想调用委托,请尝试像这样。
[self.mydelegate arrowMenuSelectedOut];
或在你的情况下
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:self.mydelegate action:@selector(arrowMenuSelectedOut)];
也做了检查您定义委派正确它不应该是零。 试试这个
self.mydelegate=self;
答
根据您在注释中输入的错误(他们应该在问题中),问题是您在创建按钮时传错了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
参数值。
你有什么问题?目前还不清楚你使用'@ selector'有什么问题? – rmaddy
问题是,我无法创建委托方法的@selector,因为我定义,如果我以上述方式定义它不是调用 –
仍然不清楚。更新你的问题清楚地显示你如何实际创建和实际使用选择器。还包括任何其他细节,如错误。 – rmaddy