如何在同一个委托类中调用Delegate方法作为选择器

时间:2016-11-08 18:38:27

标签: ios objective-c delegates

我有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方法作为同一代理类的选择器。

2 个答案:

答案 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参数值。