簡體   English   中英

表格單元重用問題

[英]Reuse of table cells issue

我相信我錯誤地實現了cellForRowAtIndexPath 我有一個UISlider ,默認情況下是隱藏的,當在表格單元格中按下按鈕時會出現。 當我按第一個單元格中的按鈕時,當我向下滾動時,滑塊不僅會出現在第一個單元格中,還會出現在每三個單元格中。 我目前正在通過將cellForRowAtIndexPath的滑塊的hidden屬性cellForRowAtIndexPathYES來避免這種情況。 我也對默認情況下需要隱藏的單元格中的其他視圖執行此操作。 當我向上滾動到第一個單元格時,這會產生一個新問題,因為該屬性在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;
}

您需要將滑塊的隱藏/未隱藏狀態存儲在數據模型中的某個位置,然后從cellForRowAtIndexPath中適當設置滑塊的可見性。 如果一次只有一個滑塊可見,則可以將索引路徑作為ivar存儲在視圖控制器中,否則,您將需要在字典中使用另一個鍵來保存NSNumber bool或其他內容。

您的問題是,當您向下滾動時,單元格將被重用。 因此,當滾動條看不到某個單元格的滑塊可見時,該單元格將被重用,因此該滑塊仍然可見。

為了避免這種情況,請在自定義單元格中執行prepareForReuse以便在單元格被重用后立即重置滑塊。

緊接着,您仍需要在模型中存儲滑塊的狀態,因此一旦該對象回到視圖中,便能夠恢復該狀態。

切記在prepareForReuse設置自定義單元格的默認狀態是一個好習慣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM