2016-01-19 46 views
1

我與iOS中tableviews工作。滾動時重新加載可重用單元格。的iOS滾動的tableView可重複使用的電池重裝

所以,在細胞內部示例 - textfields - 用於更新時,它一度消失在滾動。我通過使用Array解決了這個問題,它保存了所有單元格中的所有文本,但我想知道是否有更好的方法來解決這個問題。

謝謝。

+0

這是不清楚你的問題,你是什麼意思:'消失一旦滾動over'? –

+0

當我向下滾動,單元格消失時,使用自定義單元格類將解決此問題 – Mayur

+1

@RASS,因此,我將其數據保存在數組中,以便當我再次向上滾動時可以恢復它。 – Sob7y

回答

0

你在描述的是如何使用tableviews!該的tableView是顯示器,而不是存儲和可重複使用的電池是隻有那些當前顯示

你是正確使用數組(或集合)來保存數據,只是使用的tableView顯示它

0

內存管理(以釋放內存)未在當前屏幕顯示其僅在內存中保留其當前在屏幕上顯示,所以你必須存儲文本從tableview中分離這些細胞的tableview去除細胞記憶。

0

你的問題可能是因爲多線程。如果你是從一個GCD操作或任何的NSOperation(不同的線程)重新加載數據,那麼你必須使用下面的代碼來獲取句柄到主線程

dispatch_sync(dispatch_get_main_queue(), ^{ 
//perform the reload activity 
}); 
0

使用字符串數組你存儲所有文本框的數據在tableview中。 使用代理方法UITableView可以更有效地實現。

-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyCell * mc = (MyCell *) cell; 
    names[indexPath.row] = mc.myTf.text; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyCell * mc = (MyCell *) cell; 
    mc.myTf.text = names[indexPath.row]; 
} 

這裏,MyCell是具有UITextField的自定義單元格。名稱[]是在類範圍聲明的NSString數組,如NSString * names[20]

0

是的,你是做正確的,因爲細胞被重用你需要保存的數據,這樣的事情 -

1。有一個數組來保存你的數據。

2。每當您對textField進行任何更改時都要更新數組,以便您的UI和數據保持同步。

  • 使用此陣列來填充的tableView。
  • 0

    您需要定義cellIdentifier獨特。然後使用唯一標識符創建每個單元。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
        { 
         NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%dR%d",indexPath.section,indexPath.row]; 
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
         if(cell == nil) 
         { 
          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; 
    
          //your logic here 
         } 
    
    
         return cell; 
        }