[英]Can delegate use a single methods for 2 delegates?
問題是這樣的:
我有一個視圖控制器控制器1 ,它是另外兩個控制器控制器2和控制器3的代表 。
控制器2具有稱為“FOO”的委托方法, 控制器3具有相同的方法。
如果兩個“FOO”方法都告訴委托做同樣的事情,我可以在Controller 1中實現一個“FOO”方法嗎?
謝謝
沙尼
良好的委托設計意味着方法不應該具有相同的名稱。 例如,如果我有兩個名為FooA
和FooB
類,它們都執行委托動作foobar:(BOOL)force
,那么委托方法名稱應如下所示:
- (void)fooA:(FooA*)foo foobar:(BOOL)force;
- (void)fooB:(FooB*)foo foobar:(BOOL)force;
這樣,您的'Controller 1'將能夠區分兩種委托方法。 你會在其他代表中注意到這一點,例如UITableView
:
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
如果shouldHighlightRowAtIndexPath
來自UITableView
或其他類,您可以區分。
說到這一點,完全有可能在兩個委托之間共享一個方法名稱,只是委托人不確定委托的來源。
你能做這個嗎? 是。 你應該這樣做嗎? 絕對沒有。 假設每個視圖控制器都在定義一個協議,那么所有協議中的方法都應該是唯一命名的。 換句話說,如果Controller 2中的協議和Controller 3中的協議都有一個簡單命名為foo
的方法,那么你做錯了。 你應該有controller1foo:
和controller2foo:
.
這就是為什么 - 在Controller 1中你可能想要同時處理這兩者,有可能在另一個控制器中你需要以不同的方式處理它們。 或者在將來,您可能會認為Controller 1需要以不同方式處理它們。 如果兩個協議都定義了相同的方法,則無法以不同方式處理它們。
這是正確的解決方案。 為每個協議方法指定唯一名稱。 然后在Controller 1中 ,實現兩個委托方法。 但是,兩種委托方法的實現都將是調用實際工作的常用方法。
在控制器1中 :
- (void)doTheCommonWork {
// This method does the common processing of the delegate calls
}
#pragma mark Controller 2 methods
- (void)controller2foo:(Controller2 *)controller {
[self doTheCommonWork];
}
#pragma mark Controller 3 methods
- (void)controller3foo:(Controller3 *)controller {
[self doTheCommonWork];
}
這種方法允許您為兩個委托方法執行相同的操作,同時仍然可以選擇在需要時執行不同的操作。
控制器2和3是該類的實例嗎?
因此,假設Controller 2是DoSomethingController,Controller 3是DoSomethingElseController,在這種情況下,您需要兩種不同的委托方法。
相反,如果控制器2和3屬於同一類,或者如果其中一個控制器的類是另一個的子類,那么這也是可以的。 例如: UITableView
和的一個子類UITableView
可以共享tableView:cellForRowAtIndexPath:
委托方法與一個委托對象(控制器1),這將是就好了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.