2009-08-27 61 views
3

我正在Cocoa Touch API上實現一個可選的委託方法。我想要做的是,首先調用已被調用的方法,如果我沒有實現委託...然後對結果進行更改...然後返回我的修改版本。如何調用如果代理不在那裏的方法

下面是一個例子:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; { 
    /* this line: */ UIView * headerView = [someObject tableView:tableView viewForHeaderInSection:section]; 
    [headerView setBackgroundColor:[UIColor redColor]]; 
    return headerView; 
} 

標線不工作。我可以把someObject = tableView.delegate,但這只是給我無限遞歸。有沒有一些技巧可以讓tableView做任何事情,如果可選的方法沒有實現呢?我不是很有希望,但如果可能的話,它會很酷。

回答

6

沒有會,如果你沒被調用的方法的反應能力不實施代表。代表們不像子類;他們不是語言功能。 UITableView(在這種情況下)做了一些工作,看看它的-delegate屬性是否爲非零(這只是一個偶然的叫做「委託」的ivar),如果是這樣,它看到委託實現委託方法,如果它調用它,然後做更多的工作。我想,UITableView並不會公開一個默認的節頭視圖(這是一個名爲UISectionHeaderCell的私有子類,我相信),所以Apple沒有對它的實現做任何承諾。或者給我們一個很好的方法來獲取它有幾種方法可以得到有關的觀點,但是蘋果公​​司還沒有給我們任何我知道的支持方式。

但是對於有關代表的一般問題,您要求的內容不存在,因爲代表的實施方式並非如此。

2

我猜的UITableView做這樣的事情:

if ([delegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) { 
    [delegate tableView:self viewForHeaderInSection:section]; 
} else { 
    // Does its own thing instead 
} 

所以我不認爲這將有可能爲你拿到原單,這種方式。

相關問題