Jak volat metodu, která by byla s názvem v případě, že delegát tam nebyl

hlasů
3

Já jsem se provádí volitelnou metodu delegáta na API Cocoa Touch. Co bych chtěl udělat, je nejprve volat metodu, která by byla s názvem kdybych neměl provádět delegáta ... pak provést změny v důsledku ... pak se vrátit svou upravenou verzi.

Zde je příklad:

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

Výrazné linie nefunguje. Mohl bych dát someObject = tableView.delegate, ale to mi dává jen nekonečnou rekurzi. Je tam nějaký trik, aby se Tableview dělat, co by to udělalo, pokud nebyla realizována doplňková metoda? Nejsem Super naděje, ale bylo by skvělé, kdyby to možné.

Položena 27/08/2009 v 03:51
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
6

Neexistuje žádná metoda, která by byla vyvolána, pokud jste implementovat delegáta. Delegáti nejsou jako podtřídy; že to není jazyk funkce. UITableView (v tomto případě), dělá nějakou práci, podívá-li její -delegate vlastnost je non-nula (což je jen náhodná Ivar, který se stane být nazýván „delegát“), a pokud ano, že vidí delegát implementuje delegáta metoda nazývá, pokud se tak stane, pak se udělá trochu více práce.

UITableView nevystavuje pohled záhlaví výchozí úsek (je to soukromý podtřídy volal UISectionHeaderCell Věřím), tak Apple nebude dělat žádné sliby o tom, jak je implementováno. nebo nám dává dobrý způsob, jak sehnat ní Existuje několik způsobů, jak se dostat do pohledu se jedná, ale Apple ještě nám dána libovolného podporovaného cestu, pokud vím.

Ale na obecnou otázku o delegátů, na co se ptáte, neexistuje, protože to není, jak se delegáti realizovat.

Odpovězeno 27/08/2009 v 04:31
zdroj uživatelem

hlasů
3

Podívejte se na dokumentaci respondsToSelector- to vám dává možnost otestovat a zjistit, zda objekt bude dobře reagovat na voliče :)

Odpovězeno 27/08/2009 v 03:57
zdroj uživatelem

hlasů
2

Hádám UITableView dělá něco takového:

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

Takže si nemyslím, že by bylo možné, abyste si ten původní, takhle.

Odpovězeno 27/08/2009 v 03:56
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more