IOS: методы делегата таблицы для двух таблиц - PullRequest
7 голосов
/ 29 июня 2011

У меня есть метод делегата для представления таблицы внутри класса:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [array1 count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease] ; 
}

cell.textLabel.text = [array1 objectAtIndex:indexPath.row];

return cell;
}

если у меня есть один UITableView, то все в порядке, но если у меня есть два UITableView?Как я могу организовать свой код?с тегом?

Ответы [ 4 ]

13 голосов
/ 29 июня 2011

Посмотрите, как во всех методах делегатов есть tableView:(UITableView *)tableView в них?

Вы можете определить ваши представления таблицы в заголовочном файле и затем просто перейти: (при условии, что ваша таблица называется myTable)

if (tableView == myTable)

Тогда вы можете иметь столько таблиц, сколько захотите.

Так, например:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [array1 count];
}

Становится:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView == myTable)
    {
       return [array1 count];
    }
    if (tableView == myTable2)
    {
       return [array2 count];
    }

    return 0;
}
3 голосов
/ 29 июня 2011

Мое предложение состоит в том, чтобы ваш источник данных выступал в качестве делегата табличного представления вместо вашего контроллера.

Эта конструкция более приближена к шаблону Model-View-Controller и позволит вам гораздо больше гибкости и позволит избежать проверки конкретного значения, которое аргумент tableView получил в ваших методах делегатов.

В вашем случае ваш делегат / источник данных будет классом с членом типа NSArray, а также реализующим протокол UITableViewDelegate.

1 голос
/ 29 июня 2011

Да, вы можете сделать это с тегом. Дайте вашим UITableViews теги 1 и 2.

установить переключатель:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease] ; 
}

switch ([tableView tag]) {
  case 1:{
    [[cell textLabel] setText:@"First tag"]
    break;
  }
  case 2:{
    [[cell textLabel] setText:@"Second tag"]
    break;
  }
  default:
    break;
}

return cell;
}
0 голосов
/ 29 июня 2011

Каждый из этих методов передает ссылку на табличное представление, которое его вызывает.Я обычно подключаю каждую таблицу к выходу в построителе интерфейса и условно возвращаю источник данных на основе сравнения с tableView в методах делегата и именах выхода.Делать это с тегом также возможно, но сложнее и сложнее при редактировании структуры представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...