2011-02-26 51 views
1

我有一個UITable,其中包含幾個包含文本字段的自定義單元格。然而,當向上和向下滾動時,這些單元格的順序會混亂。UITableViewCell dequeueReusableCellWithIdentifier不按順序

我搜索,這不適合我因爲我有幾個UITextFields,我需要抓住用戶輸入這些。

UITableViewCell showing indexpath rows out of order

謝謝

+1

您應該觀看WWDC 2010會話128,掌握表格視圖。在Google上搜索它。問題在於表格單元格是可重用的,因爲表格中的每一行在視覺上都是相同的,但內容不同。您需要確保返回的表格單元格包含所請求的索引路徑的正確數據,而不僅僅是任何行。觀看視頻以獲取更多詳細信息和示例代碼。 – Douglas 2011-02-26 19:34:39

回答

1

您或者需要爲每個單元使用唯一的標識符,否則完全避免使用出列機制。如果您正在執行後者,請將對每個單元格的引用存儲在相應的實例變量中,否則將它們全部添加到存儲在實例變量中的集合中。

如果你決定走這條路,你可以通過以下兩種方法之一來做到這一點:在界面生成器中創建單元格(這會很方便,因爲它們可能已經嵌套文本字段,很好地定位,等等。)並使用插座連接它們,或以編程方式在viewDidLoadinit...方法中創建單元格。

無論哪種情況,您都不再需要致電dequeueReusableCellWithIdentifier:;相反,您可以返回已經創建的單元格實例。

+0

是的,我必須根據我的要求實現我獨特的dequeueReusableCellWithIdentifier方法。這解決了問題。感謝您的意見。 – Dilshan 2011-02-27 17:39:32

+0

不客氣!那麼你是否最終爲每個單元使用了一個唯一的標識符? – jlehr 2011-02-27 19:18:36

0

@Dilshan你可以做類似這樣的東西在你的代碼來實現你想要什麼。

. 
. 
. 
if(cell == nil) 
{ 
// create your cell in this block of quotes in the cellForRowAtIndexPath: method to avoid making of the cells again, so that your textfield value remain as it is. 
. 
. 
. 
//place all the code in this block only. 
} 
[cell autorelease]; 
return cell; 

對不起,我沒有xcode在家裏,所以我不能給你任何特定的代碼。

但我想你明白了。
歡呼聲。

+0

感謝您的回覆。我確實如下。看我的下一篇文章。 – Dilshan 2011-02-26 19:24:00

0

這是我的代碼。 CustomTextFieldCell是一個帶有UITextField的單元格。和一些信息。但是,當您滾動時,填充的值和這些更改的順序。

static NSString *CellIdentifier = @"CustomTextFieldCell"; 
    CustomTextFieldCell *cell = (CustomTextFieldCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 

     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTextFieldCell" owner:nil options:nil]; 


     for (id currentObject in topLevelObjects) { 
      if ([currentObject isKindOfClass:[UITableViewCell class]]) { 
       cell = (CustomTextFieldCell *) currentObject; 
       break; 
      } 
     } 
    } 
+0

只是一個註釋 - 最好通過編輯原始問題來添加補充信息,而不是將其作爲答案發布。 – jlehr 2011-02-26 21:55:56

+0

感謝您的評論jLehr – Dilshan 2011-02-27 08:04:07

相關問題