2012-05-26 64 views
2

我有一個叫ToolbarView的類,它是UIView的一個子類,基本上創建了一個UIView,其頂部消失/重新出現UIToolbar。我還有一個名爲DraggableToolbarViewToolbarView的子類,它使用戶能夠在屏幕上拖動視圖。代表的子類?

我需要創建一個委託ToolbarView,因此它可以通知其他對象/類時,工具欄會重新出現並消失的。我還需要爲DraggableToolbarView創建一個委託,以便在拖動視圖時通知另一個對象/類。

目前,我已創建爲每個單獨的委託,但我不知道是否有這個更好的模式?可能需要爲ToolbarView實施一個代理,並將代理方法DraggableToolbarView列爲可選項?或者有沒有一種方法來委託一個委託?

什麼是最好的/最乾淨的方式來實現這一目標?

回答

5

如果您爲您的委託方法的協議(反正總是一個好主意),你可以有其他協議採用第一種。這建立了一種類似遺產的關係:

@protocol ToolbarViewDelegate 
// some methods 
@end 

@protocol DraggableToolbarViewDelegate <ToolBarViewDelegate> 
// additional methods 
@end 
+0

嗯..複製我的答案很多?? –

+3

@ RichardJ.RossIII實際上並非如此。它不時發生,兩個人幾乎同時會提供類似的答案,特別是當有一個規範的答案時。坦率地說,我認爲我的答案稍微好一些,因爲協議的名稱更合適。 – Caleb

+1

它使用協議之間的關係正確的術語。 –

4

是的,你可以有inheriting協議:

@protocol Proto1 

@reqired 
-(void) somethingHappened:(id) sender; 

@optional 
-(void) somethingElseHappened:(id) sender; 

@end 

@protocol Proto2<Proto1> 

// this now contains all of the method signatures found in proto1, with the addition of new ones! 

-(void) somethingSpecialHappened:(id) sender; 

@end 
+0

他們是否必須在同一個文件?我試過這個DraggableToolbarView,它沒有實現ToolbarView方法。 –

+0

@CoDEFRo它不會自動實現這些協議,它只是廣播他們在那裏。您仍然必須爲每個添加實現。 –

+0

+1只是因爲我認爲你應該至少有@ Caleb的答案相同的點,因爲兩個答案几乎相同 – abbood

0

我覺得你這樣做是正確的。

考慮UITextView這是UIScrollView一個子類。每個都有自己的委託協議,負責對特定的一組消息作出反應。只要您將可見性和拖動視爲單獨的問題,允許不同的對象處理其委託似乎是合乎邏輯的。