2012-05-31 57 views
0

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

回答

3

您需要存儲您的滑塊隱藏/取消隱藏狀態在數據模型中的某個地方,然後從適當設置滑塊的知名度在cellForRowAtIndexPath中。如果一次只能看到一個滑塊,則可以將索引路徑作爲ivar存儲在視圖控制器中,如果不存在,則需要在字典中另存一個鍵,以存放NSNumber布爾值或其他值。

+0

我現在明白了,但我在實施時遇到了問題。我不認爲我可以使用'NSDictionary *字典'B/C它在cellFor中重新創建...你能給更多的細節嗎? – mnort9

+0

我的意思是當前保存在你的prseTrackArray中的字典 - 如果這是可變的,你可以在每行中按下按鈕時在其中設置一個新的鍵/值對。你有多少行,你的表視圖是否有段,並且可以同時顯示多個滑塊? – jrturton

+0

行數是動態的。現在大約有100行(parseTrackArray.count),但隨着對象每天添加到parseTrackArray中,會隨着時間的推移而增加到成千上萬。 tableView沒有部分,一次會顯示多個滑塊。 – mnort9

1

你的問題是,當你向下滾動你的細胞被重用。因此,當滑動條對於滾動出視圖的單元格可見時,該單元格將被重用,因此滑塊仍然可見。

要避免在您的自定義單元格中執行此實現prepareForReuse以在您的單元格重新使用後立即重置滑塊。

除此之外,您仍然需要將滑塊的狀態存儲在模型中,以便您可以在該對象返回到視圖中時恢復該狀態。

Nevertjeless它是一個很好的做法,設置您的自定義單元格的默認狀態prepareForReuse

+0

這將導致與在cellForRow中將隱藏設置爲YES相同的行爲... – Matt

+0

@Matt,是的,你是對的,你仍然需要在數據源模型中保存滑塊的狀態,我添加了一些更多的細節 – iTukker

+0

謝謝。你建議什麼方法來存儲滑塊的狀態? – mnort9