似乎有很多關於此問題的問題,但我無法使用任何人的答案,所以希望有人可以回顧一下我是如何做到這一點的。我正在嘗試使用。我有兩個自定義的UITableViewCells,它們現在對它們只有一個BOOL屬性,這就是它的樣式。自定義UITableViewCells沒有在UITableView上重複使用
在我的cellForRowAtIndexPath
方法基於什麼類型的數據回來我正在設計我的細胞。如果數據是「月」標題,那麼它就是一個看起來很長的細胞,如果它是「新聞」,它將成爲一個更大的白色細胞。
當表加載一切看起來很大,但如果我向下滾動,以創造更多的細胞,達到細胞被重建,並最終滾動減慢,因爲我跑出來的內存中,然後向後滾動。
當我設置中斷點時dequeueReusableCellWithIdentifier
總是返回零,所以我的細胞不會重用,這似乎是一個問題。
在這張圖片中可以看到,細胞越來越堆疊在彼此的頂部和搞砸:
這裏我我的代碼:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *NewsCellIdentifer = @"NewsCellIdentifier";
static NSString *MonthCellIdentifier = @"MonthCellIdentifier";
NSUInteger row = [indexPath row];
NewsItem *item = [self.newsArray objectAtIndex:row];
if (item.IsMonth == YES)
{
NewsMonthUITableViewCell *cell = [self.mytableView dequeueReusableCellWithIdentifier:MonthCellIdentifier];
if (cell == nil)
{
cell = [[NewsMonthUITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MonthCellIdentifier];
}
// This handles any other "date" cells to allow for different spacing styles.
if (item.IsMonth)
{
UIImageView *av = [[UIImageView alloc] initWithFrame:CGRectMake(0, 10, 400, 20)];
av.backgroundColor = [UIColor clearColor];
av.opaque = NO;
av.image = [UIImage imageNamed:@"month-bar-bkgd.png"];
UILabel *monthTextLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 150, 20)];;
CGFloat font = 11.0f;
monthTextLabel.font = [BVFont HelveticaNeue:&font];
monthTextLabel.backgroundColor = [UIColor clearColor];
monthTextLabel.font = [BVFont HelveticaNeue:&font];
monthTextLabel.textColor = [BVFont WebGrey];
monthTextLabel.text = item.Title;
cell.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:av];
[cell.contentView addSubview:monthTextLabel];
}
return cell;
}
else
{
NewsUITableViewCell *cell = [self.mytableView dequeueReusableCellWithIdentifier:NewsCellIdentifer];
if (cell == nil)
{
cell = [[NewsUITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NewsCellIdentifer];
}
cell.contentView.backgroundColor = [UIColor clearColor];
UIView *whiteRoundedCornerView = [[UIView alloc] initWithFrame:CGRectMake(10,10,300,100)];
whiteRoundedCornerView.backgroundColor = [UIColor whiteColor];
whiteRoundedCornerView.layer.masksToBounds = NO;
whiteRoundedCornerView.layer.cornerRadius = 3.0;
whiteRoundedCornerView.layer.shadowOffset = CGSizeMake(-1, 1);
whiteRoundedCornerView.layer.shadowOpacity = 0.5;
[cell.contentView addSubview:whiteRoundedCornerView];
[cell.contentView sendSubviewToBack:whiteRoundedCornerView];
[cell.contentView addSubview:[self NewsItemThumbnailView:item]];
[cell.contentView addSubview:[self NewsItemTextView:item]];
[cell.contentView addSubview:[self NewsItemCornerIconIndicatorView:item]];
return cell;
}
return nil;
}
感謝您的任何援助或諮詢!
你在使用故事板嗎? – 2013-02-27 16:55:11
您是否正在使用動態原型的故事板?如果是,請檢查屬性檢查器中的每個單元格「標識符」是否設置正確。另外,如果你不使用故事板和動態原型,你創建和添加子視圖的代碼應該放在你的if(cell == nil)塊中。我的建議是使用動態原型的Storyboard並在IB中的單元格中進行自定義。 – 2013-02-27 16:57:13
我正在使用Storyboard,但我沒有使用Prototyped單元格或在故事板中設計我的單元格。我只是將我的TableView放在屏幕上,但以編程方式完成剩下的工作。 – Flea 2013-02-27 16:57:36