2013-04-22 73 views
0

我有一個簡單的UITableView使用自定義的UITableViewCells。 在UITableView的屬性上設置的選項只是將樣式設置爲分組。 當我試圖通過不同的項目向下滾動滾動是非常跳動。 我已經研究了這個相當有點看在Tricks for improving iPhone UITableView scrolling performance?和在這個網站上的一些其他問題。儘管如此,我還沒有真正找到解決方案。UITableView靜態滾動

編輯**** 我使用WSDL webservice將數據加載到UITableViewCells中。 單元格只有一個UITextView和三個按鈕。

編輯****

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"NavigatorCell"; 

    NewCell *cell = (NewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NewCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 
    } 

    cell.postId = [[items objectAtIndex:indexPath.row] objectForKey:@"PostID"]; 
    cell.post.text = [[items objectAtIndex:indexPath.row] objectForKey:@"Post"]; 

    return cell; 
} 
+0

您的tableview設置爲重用單元格嗎? – JeffN 2013-04-22 21:08:40

+0

你加載到單元格中的是什麼? – holex 2013-04-22 21:10:26

+0

@ DCS123我該如何設置? – 2013-04-22 21:14:24

回答

1

我看到您的NewCell已被分類。

不要忘了,包括這個方法到您的NewCell.m

- (NSString *) reuseIdentifier 
{  
    return @"Cell Identifier"; 
} 

當然@"Cell Identifier"應該是您在cellForRowAtIndexPath:使用相同的。 如果您未能實現此方法,則每個單元格都將從頭開始生成。

+1

修好了!我無法感謝你對我的幫助。 – 2013-04-22 21:28:24

+0

總是樂於幫助:) – 2013-04-22 21:29:12

0

您使用的是dequeReusableCellWithIdentifier?按照下面的格式。既然您現在提到您正在從網絡加載數據,您需要異步執行此操作以實現平滑滾動。若要從web服務加載(異步)有一個很好的項目只是爲here

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath 
{ 
    static NSString *CellIdentifier = @"yourCellName"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    return cell; 
} 
+0

是的,我正在使用它。 – 2013-04-22 21:16:06

+0

我將所有數據加載到NSMutableArray中,然後使用該箭頭填充UITableView。 – 2013-04-22 21:17:01

+0

你說你使用WSDL服務加載到單元格中。你是首先加載到數組嗎? – 2013-04-22 21:18:17

0

設置你的tableview要重用的小區是保證良好性能的最根本途徑。基本上這意味着不是爲tableview中的每個單元格創建一個新的單元格,您的tableview將回收不在屏幕上的單元格。基本設置爲以下,更可以從的UITableViewDelegate蘋果文檔可以瞭解到鏈接here

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
     { 
      NSString *CellIdentifier = @"Cell Identifier"; 

      CustomCellClassName *cell = (CustomCellClassName *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

       if (cell == nil){ 
        cell = [[CustomCellClassName alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, tableView.frame.size.height)]; 
        //Do basic cell construction common to all cells of this type here 
        //Set background, image etc. 
       } 



       //Do specific cell construction here 
       return cell; 
+0

請參閱最新的問題。 – 2013-04-22 21:24:20

+0

似乎設置正確,你會想看看異步加載你的數據。你的數據是否使用標準的Apple網絡?在Github上查看名爲AFNetworking的庫 – JeffN 2013-04-22 21:25:58

0

如果要加載在網絡上的每個單元中的數據,你會看到表現不佳。批量提取數據,然後在準備好時告訴你的tableview重新加載自己。

將Core Data用作臨時後備存儲,並使用NSFetchedResultsController從Core Data中檢索信息,將爲您節省一些工作量。

+0

我將它全部加載到NSMutableArray中,然後UITableView正在使用該數組處理它。 – 2013-04-22 21:26:15