2012-04-12 69 views
0

我正在嘗試定製處理旋轉和自定義排列的UIToolbar。當它處於肖像模式時,某些barbuttonitems將不可見,所以我添加了一個「更多」按鈕,從中彈出一個小視圖。我的問題是,當我目前的方向是肖像,當我選擇一個可見的barbuttonitem(不在彈出窗口中)時,我想關閉彈出窗口,如果它是打開的。我想在彈出視圖中使用uibarbuttons的smae行爲在點擊後關閉彈出窗口。替換或擴展UIBarButtonItem選擇器

所以我想用我自己不知何故更換的UIBarButtonItem的選擇,在我所說的已定義的操作,像這樣:

-(SEL)extendOriginal:(UIBarButtonItem *) uibb 
{ 
    if (popup) popup.hidden = YES; 
    [uibb.target performSelector:uibb.action]; 
    // return ?? do what ?? 
} 

但我怎麼取代原來的選擇來調用這個自定義方法與我的自定義UIToolbar作爲其目標?或者我怎麼能用這個調用「擴展」原始選擇器?很抱歉,如果問題是瘸子:)

編輯:換句話說,我要當的UIBarButtonItem被竊聽要執行2個行動與2個獨立的目標。

謝謝!

回答

0

最後,我發現了一個辦法做到這一點,不是最漂亮的,但很有效。

在我的佈局方法a UITapGestureRecognizer中創建的自定義工具欄類中處理水龍頭。我已經設置了cancelsTouchesInView爲false,並在

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 

方法,我只返回了我的工具欄的子視圖如此。

這樣,原來的目標和每個UIBarButtonItem的作用是一樣的,並補充代碼來處理我的彈出是UIGestureRecognizer的作用。 另一個問題是區分工具欄上的挖掘項目(touch.view中的挖掘視圖是一些未公開的視圖,耶),最終我做了一些BOOL iVars。

我希望這會幫助有同樣問題的人。

0

這個-(SEL)extendOriginal:(UIBarButtonItem *) uibb沒有任何意義。

我假設你正在設置目標以及酒吧按鈕項目的動作。在那裏你可以設置任何方法使用一個參數idUIBarButtonItem*作爲選擇器。

因此嘗試更改您的代碼

- (void)myMethod:(UIBarButtonItem *) uibb 
{ 
    if (popup) popup.hidden = YES; 

    // do cool stuff here 
} 

,並設定目標爲

[[UIBarButtonItem alloc] initWithTitle: @"Blabla" style: UIBarButtonItemStylePlain target: self action: @selector(myMethod:)]; 
+0

是的,我知道它沒有任何意義:)我添加了UIBarButtonItems在一個viewcontroller中有我的自定義工具欄之一。我的問題是我想透明地實現它,所以定義按鈕操作的其他viewcontroller應該沒有代碼實現這個實現細節(順便說一句,目前它已經,但這就是爲什麼我要自定義工具欄自動處理這個問題。 – Templar 2012-04-12 11:23:55

+0

編輯我的問題,更確切地說。 – Templar 2012-04-12 11:35:08