我有3个tableviews和3个数据源。我用XML中的数据填充它们。当我只填写一个tableview时,所有tableviews都会填充相同的文本。
所有tableviewcells都有相同的标识符:“AlbumCell”
这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
otoFosilArray = [[NSMutableArray alloc] init];
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
updateArray = appDelegate.derinlikListesiArrayMikro;
_arrayFosiller1 = [[NSMutableArray alloc] init];
_arrayFosiller2 = [[NSMutableArray alloc] init];
_arrayFosiller3 = [[NSMutableArray alloc] init];
tableFosiller1.dataSource = self;
tableFosiller1.delegate = self;
tableFosiller2.dataSource = self;
tableFosiller2.delegate = self;
tableFosiller3.dataSource = self;
tableFosiller3.delegate = self;
[self otoFosilEkle];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if (tableView == self.tableFosiller1) {
return 1;
}
else if (tableView == self.tableFosiller2) {
return 1;
}
else if (tableView == self.tableFosiller3) {
return 1;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (cbvMBentik.checked == YES) {
return [_arrayFosiller1 count];
}
if (cbvMPlanktonik.checked == YES) {
return [_arrayFosiller2 count];
}
if (cbvMDiger.checked == YES) {
return [_arrayFosiller3 count];
}
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:@"AlbumCell"];
if (cbvMBentik.checked == YES)
cell.textLabel.text = [_arrayFosiller1 objectAtIndex:indexPath.row];
if (cbvMPlanktonik.checked == YES)
cell.textLabel.text = [_arrayFosiller2 objectAtIndex:indexPath.row];
if (cbvMDiger.checked == YES)
cell.textLabel.text = [_arrayFosiller3 objectAtIndex:indexPath.row];
return cell;
}
- (void)otoFosilEkle
{
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
otoFosilArray = appDelegate.derinlikListesiArrayMikroFosil;
NSString *tempStr;
for (int i = 0; i < [otoFosilArray count]; i++)
{
if ([[[otoFosilArray objectAtIndex:i] Durum] isEqualToString:@"Bentik"]) {
cbvMBentik.checked = YES;
cbvMPlanktonik.checked = NO;
cbvMDiger.checked = NO;
tableFosiller1.userInteractionEnabled = YES;
tableFosiller2.userInteractionEnabled = NO;
tableFosiller3.userInteractionEnabled = NO;
tempStr = @"text1";
[_arrayFosiller1 addObject:tempStr];
[tableFosiller1 reloadData];
}
if ([[[otoFosilArray objectAtIndex:i] Durum] isEqualToString:@"Planktonik"]) {
cbvMBentik.checked = NO;
cbvMPlanktonik.checked = YES;
cbvMDiger.checked = NO;
tableFosiller1.userInteractionEnabled = NO;
tableFosiller2.userInteractionEnabled = YES;
tableFosiller3.userInteractionEnabled = NO;
tempStr = @"text2";
[_arrayFosiller2 addObject:tempStr];
[tableFosiller2 reloadData];
}
if ([[[otoFosilArray objectAtIndex:i] Durum] isEqualToString:@"Diğer"]) {
cbvMBentik.checked = NO;
cbvMPlanktonik.checked = NO;
cbvMDiger.checked = YES;
tableFosiller1.userInteractionEnabled = NO;
tableFosiller2.userInteractionEnabled = NO;
tableFosiller3.userInteractionEnabled = YES;
tempStr = @"text3"
[_arrayFosiller3 addObject:tempStr];
[tableFosiller3 reloadData];
}
}
}
答案 0 :(得分:3)
您需要检查
if (tableView == self.tableFosiller1) {
}
else if (tableView == self.tableFosiller2) {
}
else if (tableView == self.tableFosiller3) {
}
在所有委托方法中,因为您具有相同的标识符
答案 1 :(得分:3)
您应该为每个表视图设置一个标记,然后在switch语句中检查这些标记以确定您正在使用哪个表视图。
- (void)viewDidLoad
{
...
self.tableFosiller1.tag = 1;
self.tableFosiller2.tag = 2;
self.tableFosiller3.tag = 3;
...
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
NSInteger num = 0;
switch(tableView.tag)
{
case 1:
case 2:
case 3:
num = 1;
break;
}
return num;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger num = 0;
switch(tableView.tag)
{
case 1:
num = [_arrayFosiller1 count];
break;
case 2:
num = [_arrayFosiller2 count];
break;
case 3:
num = [_arrayFosiller3 count];
break;
}
return num;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellText = nil;
switch(tableView.tag)
{
case 1:
cellText = [_arrayFosiller1 objectAtIndex:indexPath.row];
break;
case 2:
cellText = [_arrayFosiller2 objectAtIndex:indexPath.row];
break;
case 3:
cellText = [_arrayFosiller3 objectAtIndex:indexPath.row];
break;
}
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:@"AlbumCell"];
if(!cell)
cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:@"AlbumCell"];
cell.textLabel.text = cellText;
return cell;
}
正如您所看到的,当涉及多个表视图时,事情会变得非常棘手。如果您对此不太满意,我建议使用免费的Sensible TableView框架。框架只需通过获取数组并生成表视图即可。如果你将它与上面的代码进行比较,真的很直接。
答案 2 :(得分:1)
所有委托方法,您需要检查以下条件
if (tableView == table1) {
}
else if (tableView == table2) {
}
else if (tableView == table3) {
}
答案 3 :(得分:1)
中需要三种类型的可重复使用的单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
在此方法中为三种不同的单元格类型创建三个标识符和代码。
答案 4 :(得分:0)
if([tableView isEqual:self.tableFosiller1]){
}
else if([tablView isEqual:self.tableFosiller2]){
}
else if([tableView isEqual:self.tableFosiller3]){
}
只需检查所有tableView委托方法