2013-11-11 3 views
2

Objective-C delegates развлекать один instance в то время как, если у меня есть два view controllers и оба реализующих же делегат, но только в настоящее время представлены view controller получить обратные вызовы.Несколько делегатов/источников данных в UITableView

Если у меня есть два uitableviews в одном view controller как uitableview'sdelagatesdatasource устанавливаются как

tb1.datasource = self; 
tb2.datasource = self; 

tb1.delegate = self; 
tb2.delegate = self; 

Как UITableView работает с делегатами, определенными в то же время?

+0

Вам необходимо убедиться, что оба экземпляра tb1 и tb2 существуют в памяти для получения обратных вызовов. – Dinesh

ответ

7

ваших методов делегата/DataSource будет называться дважды, один раз для каждой таблицы, и вы можете обнаружить, какая таблица была вызвана:

Например:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView == tb1) 
     return 10; 
    else if (tableView == tb2) 
     return 8; 
} 

Вот причина, вызывающий Tableview является передается как переменная в методах, поэтому вы можете определить, откуда она.

2

Два UITableViews в UIViewController означает два экземпляра tableViews в контроллере вида. Поэтому, если вы устанавливаете dataSource и delegate из двух экземпляров tableView, значит, вы оба tableView вызывают то же самое delegate и dataSource методов. Теперь, если вам нужна другая функциональность для tableViews, вы можете установить тег в tableViews и в методе проверить этот тег и выполнить определенную задачу в зависимости от этого тега.

Смежные вопросы