2013-11-12 2 views
2

Я пытаюсь реализовать 3 таблицы в одном сеге в раскадровке. Когда выбрана одна таблица, она будет скрывать представление с другой таблицей, а также еще одну. Следующий код, который я использовал для одной таблицы, формат ячейки для каждой таблицы различен, а строки также различаются. Итак, как я могу ДИФФЕРЕНЦИРОВАТЬ между каждой таблицей путем кодирования, чтобы установить различное количество строк для каждой таблицы и так далее?Программа iOS для использования нескольких UITableView в одном UIViewController

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 3; 
} 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell2"; 
    UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell1==nil) 
{ 
    cell1=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
    temp=[array objectAtIndex:indexPath.row]; 
    UILabel *Label1 = (UILabel *)[cell1 viewWithTag:4]; 
    Label1.text = temp.Title; 
    UILabel *Label2 = (UILabel *)[cell1 viewWithTag:6]; 
    Label2.text = temp.Title; 
    UITextField *textfield1 = (UITextField *)[cell1 viewWithTag:5]; 
    textfield1.text =temp.description; 
    UILabel *Label3 = (UILabel *)[cell1 viewWithTag:7]; 
    Label3.text = temp.Title; 
    return cell1; 
} 
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    self.showlist=[[ShowList alloc]initWithNibName:@"ShowList" bundle:nil]; 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
    ShowlistIndex=indexPath.row; 
    _secondview.hidden=NO; 
} 
+1

Вместо того, чтобы поставить все 'UITableView 's в один' UIViewController', создать один 'UIViewController' и 3' UITableViewController'. Добавьте каждый 'UITableViewController' в качестве контроллера детского представления' UITableViewController'. Это позволяет вам реализовать каждый 'UITableViewController' отдельно, без связки if/else if в каждом из методов делегата представления таблицы. – bobnoble

+0

@bobnoble Я думал об этом, но у меня есть некоторые проблемы для реализации контроллера детского представления. Раньше этого не делал. Вот почему я попытался поместить его в суб-представления. В любом случае спасибо за это. – Spidy

ответ

12

Вы должны объявить файл tableViews в .h.

@property (weak, nonatomic) UITableView *firstTableView; 
@property (weak, nonatomic) UITableView *secondTableView; 
@property (weak, nonatomic) UITableView *thirdTableView; 

И тогда все методы делегата имеют переменную указывая ведьму объект вызова этого метода, так что вы можете проверить:

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if(tableView == self.firstTableView) 
     return 3; 
    else if(tableView == self.secondTableView) 
     return 4; 
    else if(tableView == self.thirdTableView) 
     return 100; 
} 

Другие методы делегата работают таким же образом.

1

У вас есть ссылка на таблицу в каждом из ваших методов делегирования? Вы можете узнать, какие TableView вы в настоящее время прогулки по основе, что ..

Предполагая ..

IBOutlet UITableView *tableView1; 
IBOutlet UITableView *tableView1; 
IBOutlet UITableView *tableView1; 

Ex:

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    if(tableView == tableView1) 
     return 1; 
    if(tableView == tableView2) 
     return 5; 
    return 10; 
} 

Вы можете сделать то же самое для других методов делегата. Надеюсь, я правильно понял ваш вопрос.

0

Вы не создали, чтобы создать 3 выхода uitableview. а затем вы можете идентифицировать tableviews по тегу definein. например tableview1.tag = 1, tableview.tag = 2 и т. д.

затем в методах таблицы вы можете его использовать. например.

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
if(tableView.tag==1){ 
return 3; 
} 
else if(tableView=2) 
{return 3;} 
} 

Возможно, эта помощь.

2

Вы можете следить за различное tableviews используя свойство класса, например:

@property (nonatomic, strong) UITableView *tableView1; 
@property (nonatomic, strong) UITableView *tableView2; 
@property (nonatomic, strong) UITableView *tableView3; 

В методах делегата вы можете проверить правильность Tableview например:

if (tableView == self.tableView1) { 
    // add code for tableView1 
} else if (tableView == self.tableView2) { 
    // add code for tableView2 
} else if (tableView == self.tableView3) { 
    // add code for tableView3 
} else { 
    // unknown tableView 
} 
Смежные вопросы