我有一个表视图,它运行良好,但现在我想让第一个单元格成为其余单元格的“解锁”按钮。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [currentPack count] + 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Row is %i", indexPath.row);
if(indexPath.row == 0)
{
SoundCell *cell = [SoundCell dequeOrCreateInTable:soundsTable];
cell._NameLabel.text = @"Unlock This Pack;
[cell._startButton setAlpha:0.0];
return cell
}
else
{
SoundCell *cell = [SoundCell dequeOrCreateInTable:soundsTable];
cell._NameLabel.text = [currentPack objectAtIndex:indexPath.row - 1];
return cell
}
}
现在它有点工作,第一个单元格与其他单元格不同,看起来完全正确。我的问题是,由于某些原因,后来的一些单元格使用
[cell._startButton setAlpha:0.0];
部分即使indexPath.row在制作时不是0。它不会发生在每个单元格中,只是间歇性的单元格,偶尔如果我上下滚动表格,那么其他单元格也会发现这个问题。在其他方面,表格工作正常,选择一个单元格会触发正确的响应等。 有谁知道是什么原因引起的?看起来最初实现起来非常简单......
由于
答案 0 :(得分:4)
对两种单元格类型使用不同的重用标识符,以便在重用时不会混合。
或者将以下行添加到其余行:
[cell._startButton setAlpha:1.0];
答案 1 :(得分:1)
你受到了细胞缓存的打击。如果您打算在某些单元格上调用setAlpha,请在所有单元格上设置它,这样您就不会从现有单元格中获得过时的值。
答案 2 :(得分:0)
我建议创建一个单独的SoundCell实例并将其存储为i-var。只需配置一次并返回行索引0.对于其余行,返回可重复使用的“常规”单元格。