2011-08-11 96 views
0

我有一個關於UitableViewCell的問題。問題是我做了一個自定義單元格,並且在該單元格中有一個複選框圖像按鈕。我檢查並取消選中它。它工作正常,但問題是,當我選擇行#1,它也選擇行#10與其他行一樣2,它會自動選擇第11行。我一次顯示10行。在自定義單元格中雙擊uitableviewcell的選擇

這裏是我的CellForIndexPath

static NSString *cellIdentifier = @"Cell"; 
InterestsTableViewCell *cell = (InterestsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
if (cell==nil) { 
    NSArray *arrayNibs = [[NSBundle mainBundle] loadNibNamed:@"InterestsTableViewCell" owner:self options:nil]; 
    cell = [arrayNibs objectAtIndex:0]; 
    cell.delegate = self; 
    cell.total = [dataArray count]; 
} 

cell.tag = indexPath.row; 

cell.lblTitle.text = [dataArray objectAtIndex:indexPath.row]; 

if (indexPath.row==0) { 
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_top_default.png"]; 
}else if(indexPath.row == [dataArray count]-1){ 
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_bottom_default.png"]; 
}else{ 
    cell.imgBg.image = [UIImage imageNamed:@"tableCell_middle_default.png"]; 
} 

return cell; 

代碼加我正在檢測到觸摸,這樣我可以更改背景圖片(我有一個其他圖像作爲背景)。代碼觸摸開始(定製小區比)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
//NSLog(@"%i",tag); 
isSelected = !isSelected; 

btnTickMark.selected = !btnTickMark.selected; 
(isSelected ? (onImage = YES) : (onImage = NO)); 

有人可以幫我在這個問題上,之所以當我點擊一排2行選擇。

在此先感謝

回答

2

這是因爲UITableView出隊單元。由於每個屏幕顯示10行非常合適,所以第11行出現在檢查中,因爲它從第1行出列。

爲了避免這種行爲,您必須添加一個檢查tableView:cellForRowAtIndexPath:來爲每個單元格設置checked選項 - 就像您爲每個單元格設置的文本一樣。

+0

你能告訴我什麼樣的檢查,我不明白 – chsab420

+0

與「檢查」我的意思是一個if-條款。我猜你在某個地方存儲單元格的選中狀態或未選中狀態,對吧?也許在InterestsTableViewCell中直接或在你的dataArray中。所以就像使用「cell.lblTitle.text = [dataArray ...」設置單元格的文本一樣,您必須爲每個單元格設置選中或未選中的狀態。 –

+0

謝謝你,我做到了。非常感謝。 – chsab420

0

試試這個:

NSArray *arrayNibs = [[NSBundle mainBundle] loadNibNamed:@"InterestsTableViewCell" owner:self options:nil]; 
for (id currentObject in arrayNibs){ 
    if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
     cell = (InterestsTableViewCell *) currentObject; 
     cell.Delegate = self; 
     cell.total = [dataArray count]; 
     break; 
    } 
} 

,讓我知道,如果這對你的作品。

+0

我試過提供的解決方案,但它根本沒有幫助。和之前一樣。 – chsab420

0

快速修復 - 改變從

InterestsTableViewCell *cell = (InterestsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

此行

InterestsTableViewCell *cell = nil; 

它的,因爲你不會被重用細胞,而不是將重裝一個不是從內存/效率的角度不錯從每次筆尖 - 但它會表明是否弗洛裏安米爾克說的是正確的(他推薦的方法將提供更好的解決方案長期)。

+0

我這樣做,現在它不會選擇雙單元格,但現在的問題是,如果我滾動圖像回到原始即未選中的圖像,即使我已選擇該單元格。你可以請指導我更多在這 – chsab420

+0

感謝您的幫助,它非常好知道你給的小費,謝謝 – chsab420

相關問題