2016-11-08 91 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