我在 Objective-C 中很新,我正在尝试做一个 UItableview 应用程序。整个概念是我有两个视图,两个表视图。在第一个视图控制器中,我有几个月,根据您按下的月份,我在第二个视图控制器中更改整数(int currentMonth)。在第二个视图控制器中,我想展示一个带有动物的表格视图。这些动物应该只显示它们是否“可猎”,并且还应显示它们“可猎”多长时间,并且我已经为此编写了代码并且它可以工作。
问题是,使用我当前的代码,我从 animalArray 中删除对象并重新加载 cellForRowAtIndexPath 中 tableview 的数据,这使得滚动非常慢。
我试图提出其他解决方案,但到目前为止没有运气,所以我希望有人能把我推向正确的方向。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"DjurCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//skapar en variabel av Appdelegate för att komma åt arrayen med djur.
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UIImage *background = [self cellBackgroundForRowAtIndexPath:indexPath];
UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:background];
cellBackgroundView.image = background;
cell.backgroundView = cellBackgroundView;
if (cell== nil) {
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}
//Skapar en label och länkar den med storyboard.
UILabel *animalNameLabel = (UILabel *)[cell viewWithTag:104];
UILabel *animalDetailLabel = (UILabel *)[cell viewWithTag:102];
NSString *strmonth;
switch (self.currentMonth) {
case 0:
strmonth=@"Juli";
break;
case 1:
strmonth=@"Augusti";
break;
case 2:
strmonth=@"September";
break;
case 3:
strmonth=@"Oktober";
break;
case 4:
strmonth=@"November";
break;
case 5:
strmonth=@"December";
break;
case 6:
strmonth=@"Januari";
break;
case 7:
strmonth=@"Februari";
break;
case 8:
strmonth=@"Mars";
break;
case 9:
strmonth=@"April";
break;
case 10:
strmonth=@"Maj";
break;
case 11:
strmonth=@"Juni";
break;
case 12:
strmonth=@"Juli";
break;
default:
break;
}
//Algoritm för utskrivandet av hur lång tid en art är jaktbar. Om nuvarande månad är större än jaktstarten och mindre än jaktstoppet.
if ((self.currentMonth>[[appDelegate.animalArray objectAtIndex:indexPath.row]getjaktstartmonth])&&(self.currentMonth<[[appDelegate.animalArray objectAtIndex:indexPath.row]getjaktstopmonth])) {
animalNameLabel.text = [[appDelegate.animalArray objectAtIndex:indexPath.row]getArt];
animalDetailLabel.text = @"Jaktbar hela månaden";
}
//Om nuvarande månad är lika med jaktstarten.
else if(self.currentMonth==[[appDelegate.animalArray objectAtIndex:indexPath.row]getjaktstartmonth]){
animalNameLabel.text = [[appDelegate.animalArray objectAtIndex:indexPath.row]getArt];
animalDetailLabel.text = [NSString stringWithFormat:@"Jaktbar från och med den %i:e %@",[[appDelegate.animalArray objectAtIndex:indexPath.row]getjaktstartday],strmonth];
}
//Om nuvarande månad är lika med jaktstoppet.
else if(self.currentMonth==[[appDelegate.animalArray objectAtIndex:indexPath.row]getjaktstopmonth]){
animalNameLabel.text = [[appDelegate.animalArray objectAtIndex:indexPath.row]getArt];
animalDetailLabel.text = [NSString stringWithFormat:@"Jaktbar till och med den %i:e %@",[[appDelegate.animalArray objectAtIndex:indexPath.row]getjaktstopday],strmonth];
}
//I övriga fall
else{
animalNameLabel.text = [[appDelegate.animalArray objectAtIndex:indexPath.row]getArt];
animalDetailLabel.text = [NSString stringWithFormat:@"Ej Jaktbar"];
}
//这就是滚动缓慢的原因。
if ([animalDetailLabel.text isEqual:@"Ej Jaktbar"]) {
[appDelegate.animalArray removeObjectAtIndex:indexPath.row];
[tableView reloadData];
}
return cell;
}
任何想法我应该如何更改代码?