2015-01-20 15 views
2

設置動作我已經創建了一個UIView有被添加到BarButtonItem。雖然我不能將操作設置爲此按鈕。以下是我正在使用的代碼:定製的UIBarButtonItem

self.menuBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.containerView]; 
    [self.menuBarButton setTarget:self]; 
    [self.menuBarButton setAction:@selector(menuButtonTapped)]; 
    self.navigationItem.leftBarButtonItem = self.menuBarButton; 

該操作未成功運行。設置爲自定義後,我也試圖直接設置一個動作來禁止按鈕。

 [self.navigationItem.leftBarButtonItem setTarget:self]; 
     [self.navigationItem.leftBarButtonItem setAction:@selector(menuButtonTapped)]; 

當我這樣做的通常barbutton項目的作品。你能幫助發現有什麼問題嗎?

+0

試試這個: UIButton * infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; [infoButton addTarget:self action:@selector(displayAboutUs)forControlEvents:UIControlEventTouchDown]; UIBarButtonItem * itemAboutUs = [[UIBarButtonItem alloc] initWithCustomView:infoButton]; – weso 2015-01-20 20:16:09

回答

5

與自定義視圖expects the view to handle user interaction初始化甲UIBarButtonItem

通過此方法不調用其目標的動作方法響應於用戶交互創建的欄按鈕項。相反,酒吧按鈕項目期望指定的自定義視圖來處理任何用戶交互並提供適當的響應。

如果您UIView不處理任何用戶交互呢,那麼作爲Miken說,你可以更換UIView與你與addTarget:selector配置UIButton

特別是,如果您要設置圖像,UIButton可以通過setImage:forState:來實現。請參閱this answer

0

當您使用UIBarButtonItem的自定義視圖時,您必須自己處理這些操作。用UIButton替換您的自定義視圖,或將UIButton添加到您的自定義視圖中,然後將目標選擇器添加到按鈕。

下面是一個例子,但要記住我自由形成這個例子中,所以它可能不是100%準確的代碼,但概念是相同的。

UIButton *button = [UIButton buttonWithType:UIBarButtonTypeCustom]; 
UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithCustomView:button]; 
[button addTarget:self selector:@selector(myBtnClk)]; 
0

要將動作添加到按鈕,您需要兩件事:創建一個方法,然後將其添加到按鈕。這裏是方法(注意語法):

- (IBAction) my_method : (id) sender { 
UIButton * btn = sender; 
} 

現在行動任務(其中按鈕創建):

[ my_button addTarget : self 
       action : @selector(my_method :) 
    forControlEvents : UIControlEventTouchUpInside ]; 
0

不要單獨使用- setAction的,我建議使用:- addTarget:action:forControlEvents:。在iOS(AppKit)中有很多類型的事件。你可以看看附加的圖像以供參考。通常,向內按壓適合按下按鈕。

+0

我必須在哪裏調用 - addTarget:action:forControlEvents:?我還沒有Fount這個方法self.menuBarButton或self.navigationItem.leftBarButtonItem – DenFav 2015-01-21 20:36:01

+0

我也沒有找到該動作UIBarButtonItem在Ctrl拖入我的代碼。它看起來像UIBarButtonItem只有'action'事件 – 2017-02-08 07:02:36

0

我決定了這個問題。所有的答案都是關於添加目標和動作到UIButton,然後用這個按鈕創建一個UIBarButtonItem。但是,正如我所說,這是真的有必要設置UIView這個按鈕(我忘了說這是必要的,因爲這個UIView有動畫,也許這就是爲什麼所有的答案是好的,但我的情況是錯誤的。) 但一個答案(https://stackoverflow.com/a/28054357/4464891)傑森歐文給了我一個好主意。我用我的自定義視圖,所以我選擇加入UITapGestureRecognizer與initWithTarget:action:設置爲我定製的UIView:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(menuButtonTapped)]; [self.containerView addGestureRecognizer:tapRecognizer];

,當我點擊按鈕tapRecognizer運行我的選擇。就是這樣了。希望它會對某人有幫助=)