0

我相信我执行不正确cellForRowAtIndexPath。我有一个UISlider默认隐藏的,当在表格单元格中按下按钮时出现。当我按下第一个单元格中的按钮时,滑块不仅出现在第一个单元格中,而且在我向下滚动时每隔三个单元格出现一次。我目前通过将滑块的 hidden 属性重置为YESin来避免这种情况cellForRowAtIndexPath。我也对默认隐藏的单元格中的其他视图执行此操作。当我向上滚动到第一个单元格时,这会产生一个新问题,滑块被隐藏,因为属性在cellForRowAtIndexPath. 这让我相信我做错了什么。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";

SongsCustomCell *songCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (songCell == nil) {
    songCell = [[SongsCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    NSLog(@"new cell created");
}

NSDictionary *dictionary = [parseTrackArray objectAtIndex: indexPath.row];
NSString *trackTitle = [dictionary objectForKey:@"trackTitle"];
NSString *trackLink = [dictionary objectForKey:@"trackStreamLink"];
songCell.trackLinkString = trackLink;
songCell.trackTitleString = trackTitle;
[songCell.trackTitleLabel setFont:[UIFont fontWithName:@"Calibri" size:22]];
songCell.trackTitleLabel.text = [NSString stringWithFormat:@"%@", trackTitle];

songCell.playButton.hidden = NO;
songCell.playbackSlider.hidden = YES;
songCell.playerHasLoaded = NO;
songCell.moviePlayer.view.hidden = YES;

return songCell;
}
4

2 回答 2

3

您需要将滑块的隐藏/未隐藏状态存储在数据模型中的某个位置,然后根据 cellForRowAtIndexPath 中的设置适当地设置滑块的可见性。如果一次只有一个滑块可见,则可以将索引路径作为 ivar 存储在视图控制器中,如果没有,则需要在字典中保存另一个键,其中包含 NSNumber 布尔值或其他内容。

于 2012-05-31T21:17:34.330 回答
1

您的问题是,当您向下滚动时,您的单元格正在被重复使用。因此,当您的滑块对于滚动出视图的单元格可见时,该单元格将被重用,因此滑块仍然可见。

为了避免prepareForReuse在您的自定义单元格中执行此操作,以便在您的单元格被重用时立即重置您的滑块。

除此之外,您仍然需要将滑块的状态存储在模型中,以便在该对象返回视图后恢复该状态。

Nevertjeless 将自定义单元格的默认状态设置为prepareForReuse

于 2012-05-31T21:17:30.253 回答