我有一個自定義單元格,其中一些有圖像和其他人沒有的表格視圖。一切工作正常,但當我開始滾動時,單元格顯示不正確(圖像放置在「錯誤」單元格中並切割)。現在有人如何解決這個問題?UITableView滾動問題
回答
要理解的關鍵是您的表單元格被重用。這樣做是爲了增加滾動的性能,因爲創建一個新的單元 - 這是一個視圖 - 是非常昂貴的。
在方法cellForRowAtIndexPath中,返回一個單元格。使用出隊方法的現有單元,或者您創建一個新單元。在那個單元格上,你可以設置你想表示的所有屬性。
我的猜測是你直接在單元格上設置這些屬性,如圖像等。然後,當您滾動時,該單元格被重用,並且您再次看到相同的圖像,但位於錯誤的單元格中。
所以,你需要的是像NSArray一樣的單獨索引來維護模型對象。該模型對象包含圖像的所有細節等。
讓我們舉一個例子。我有一個包含10個對象的數組,其中前五個是圖像「a.png」和第二個五個「b.png」。
如果我接收的cellForRowAtIndexPath的回調,我想要做如下:
的cellForRowAtIndexPath:(0,0)從陣列提供對象索引0,這是a.png 的cellForRowAtIndexPath:(0 ,1)從數組中提供一個索引爲1的對象,即a.png cellForRowAtIndexPath:(0,2)從數組索引2中提供對象,即a.png cellForRowAtIndexPath:(0,3)從數組a中提供對象索引3,即a.png cellForRowAtIndexPath:(0,4)從數組索引4提供對象,即a.png cellForRowAtIndexPath:(0,5)從數組索引5中提供對象,這是b.png cellForRowAtIndexPath:(0,6)從數組索引6提供對象,即b.png cellForRowAtIndexPath:(0,7)從數組中提供對象索引7,即b.png cellForRowAtIndexPath: (0,8)從陣列提供對象索引8,其b.png 的cellForRowAtIndexPath:(0,9)從陣列提供對象索引9,該b.png
現在,讓我們考慮在UITableView中,在封面下方,五個單元正在被重用。
對於每個調用以上,將出現以下情況:
的cellForRowAtIndexPath:(0,1)從陣列提供對象索引1,這是一個。png - 您嘗試將現有單元出列,但它返回「nil」,因此您創建了一個新單元。您設置模型對象的細節。
cellForRowAtIndexPath:(0,2)從數組中提供對象索引2,即a.png - 您試圖將現有單元出列,但它返回「nil」,因此您創建了新單元。您設置模型對象的細節。
cellForRowAtIndexPath:(0,3)從數組中提供對象索引3,即a.png - 試圖將現有單元出列,但它返回「nil」以便創建新單元。您設置模型對象的細節。
cellForRowAtIndexPath:(0,4)從數組中提供對象索引4,即a.png - 您嘗試出隊現有單元,但它返回「nil」,因此您創建了新單元。您設置模型對象的細節。
cellForRowAtIndexPath:(0,5)從數組中提供對象索引5,即b.png - 您試圖將現有單元出列並且它可以工作!您可以通過設置模型對象的細節再次使用該單元格
cellForRowAtIndexPath:(0,6)從數組中提供對象索引6,即b.png - 您試圖使現有單元出隊作品!您可以通過設置模型對象的細節再次使用該單元格
cellForRowAtIndexPath:(0,7)從數組中提供對象索引7,即b.png - 您試圖使現有單元出列作品!您可以通過設置模型對象的細節再次使用該單元格
cellForRowAtIndexPath:(0,8)從數組中提供對象索引8,即b.png - 您試圖使現有單元出隊作品!您可以通過設置模型對象的詳細信息再次使用該單元格
cellForRowAtIndexPath:(0,9)從數組中提供對象索引9,即b.png - 您試圖使現有單元出隊作品!您可以通過設置模型對象的詳細信息再次使用該單元格
對不起,如此冗長!我希望這有幫助。也許這是值得通過一個很好的表格視圖教程。肯定會有很多。
您可能在創建單元格實例時添加圖像,而不是在表格視圖請求單元格視圖時添加圖像。例如:
這是正確的方法。每次表格視圖要求單元格時,我們都會設置圖像。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ident"];
UIImageView *imageView;
if (cell == nil) {
cell = [UITableViewCell alloc] init ....];
imageView = [[UIIMageView alloc] init];
imageView.tag = 123;
[cell addSubview:imageView];
[imageView release];
} else {
imageView = [cell viewWithTag:123];
}
imageView.image = ...; // load image here
}
這是錯誤的方法。我們在創建單元格時設置圖像。這會導致細胞在重新使用時出現錯誤的圖像。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ident"];
if (cell == nil) {
cell = [UITableViewCell alloc] init ....];
UIImageView *imageView = [[UIIMageView alloc] init];
imageView.image = ...;
[cell addSubview:imageView];
[imageView release];
}
}
嘗試更改單元格的標識符值。
NSString* identifierStr = [NSString stringWithFormat:@"ident_%d",indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifierStr];
- 1. UITableView滾動問題
- 2. UITableView滾動問題
- 3. UITableview可滾動問題
- 4. iphone - UITableView滾動問題
- 5. 滾動問題的UITableView
- 6. UITableView索引滾動問題
- 7. UITableView滾動/插入問題
- 8. UITableview的滾動更改UIButton的圖像,UITableview滾動問題
- 9. 自動滾動的UITableView問題
- 10. 滾動UITableView標題?
- 11. uitableview和web視圖的滾動問題
- 12. 內存警告後UITableView滾動問題
- 13. 滾動問題的UITableView與UIView的它
- 14. 問題,同時禁用滾動的UITableview
- 15. UITableView的滾動和重繪問題
- 16. 奇怪的UITableView滾動問題
- 17. UITableview dequeueReusableCellWithIdentifier和滾動冷凍問題
- 18. UItableview滾動工具欄下的問題
- 19. 水平滾動的UICollectionViewCell中的UITableView垂直滾動問題
- 20. UITableView標題視圖滾動
- 21. UITableView部分標題滾動
- 22. UITableView動畫問題
- 23. 滾動問題
- 24. 滾動問題
- 25. 滾動問題!
- 26. 滾動問題
- 27. UITableView滾動
- 28. Slow UITableView滾動
- 29. 自動滾動UITableView
- 30. 問題與iOS上的UITableView滾動在我的表頭是不是滾動
顯示單元構造的代碼會幫助你。 – Jhaliya
代碼真的很大,但主要目的是在必要時添加圖像並相應地編輯單元格高度。 – superM
你在桌子上使用多個部分? – Jhaliya