2016-11-08 95 views
2

我有我的自定义委托类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方法作为选择器从按钮按下相同的委托类。

+2

你有什么问题?目前还不清楚你使用'@ selector'有什么问题? – rmaddy

+0

问题是,我无法创建委托方法的@selector,因为我定义,如果我以上述方式定义它不是调用 –

+0

仍然不清楚。更新你的问题清楚地显示你如何实际创建和实际使用选择器。还包括任何其他细节,如错误。 – rmaddy

回答

2

如果您想调用委托,请尝试像这样。

[self.mydelegate arrowMenuSelectedOut]; 

或在你的情况下

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:self.mydelegate action:@selector(arrowMenuSelectedOut)]; 

也做了检查您定义委派正确它不应该是零。 试试这个

self.mydelegate=self; 
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参数值。

+0

让我在1小时内检查 –

+0

我检查这次没有错误,但它的stil没有调用方法 –

+1

你确定'self.mydelegate'不是'nil'创建按钮? – rmaddy