IOS: методы делегата tableview для двух tableview
У меня есть этот метод делегата для tableview внутри класса:
- (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 ответов
посмотрите, как все методы делегата имеют 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;
}
мое предложение с вашей акт исходные данные в виде таблицы делегат, а не контроллер.
Это дизайн более близкий к шаблону Model-View-Controller и позволит вам гораздо больше гибкости и избежать проверки конкретного значения, которое tableView
аргумент попал в ваши методы делегата.
в вашем случае ваш делегат / источник данных будет классом с членом типа NSArray
и осуществляет UITableViewDelegate
протокол.
Да, вы можете сделать это с помощью тега. Дайте 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;
}
каждый из этих методов передает ссылку на представление таблицы, которое его вызывает. Обычно я подключаю каждую таблицу к розетке в interface builder и условно возвращаю источник данных на основе сравнения с tableView в методах делегата и именах розеток. Это также возможно с помощью тега, но более беспорядочно и более открыто для осложнений при редактировании структуры представления.