2013-04-22 4 views
0

У меня есть простой UITableView с использованием пользовательских UITableViewCells. Параметры, установленные в свойствах UITableView, заключаются только в том, что для стиля установлено значение Grouped. Когда я пытаюсь прокрутить вниз по различным элементам, свиток очень нервный. Я исследовал это довольно немного, глядя на Tricks for improving iPhone UITableView scrolling performance? и еще несколько вопросов на этом сайте. Однако я не смог найти решение.UITableView Static Scrolling

EDIT **** Я использую веб-сервис WSDL для загрузки данных в UITableViewCells. В ячейках есть только UITextView и три кнопки.

EDIT ****

-(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

Ваш планшет настроен на повторное использование ячеек? – JeffN

+0

Что вы загружаете в ячейки? – holex

+0

@ DCS123 как мне установить это? –

ответ

1

Я вижу ваш NewCell подклассом.

Не забудьте включить этот метод в вашей NewCell.m

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

Конечно @"Cell Identifier" должна быть такой же, что вы используете в вашем cellForRowAtIndexPath:. Если вы не реализуете этот метод, каждая ячейка будет сгенерирована с нуля.

+1

Это исправлено! Я не могу поблагодарить вас за то, что помог мне в этом. –

+0

Всегда рад помочь :) –

0

Вы используете dequeReusableCellWithIdentifier? Следуйте приведенному ниже формату. Поскольку вы сейчас упоминаете, что вы загружаете данные из Интернета, вам нужно сделать это асинхронно, чтобы обеспечить плавную прокрутку. Чтобы загрузить с веб-сервиса (асинхронно) есть хороший проект только для того here

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

    return cell; 
} 
+0

Да, я использую это. –

+0

Я загружаю все данные в NSMutableArray, а затем использую эту стрелку для заполнения UITableView. –

+0

Вы сказали, что используете службу WSDL для загрузки в ячейки. Вы сначала загружаете в массив? –

0

Настройка вашего 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

См. Обновленный вопрос. –

+0

Кажется, что настроено правильно, вам нужно посмотреть асинхронную загрузку ваших данных. Используете ли вы стандартную сеть Apple Networking для своих данных? Посмотрите на библиотеку под названием AFNetworking on Github – JeffN

0

Если вы загружаете данные по сети для каждой ячейки, вы будете видеть плохую работу. Выполните пакетную выборку данных, а затем, когда она будет готова, скажите, что ваше табличное представление перезагрузилось.

Использование Core Data в качестве хранилища временной поддержки и NSFetchedResultsController для извлечения информации из основных данных позволит сэкономить вам некоторую работу.

+0

Я загружаю все это в NSMutableArray, тогда UITableView обрабатывает его с помощью массива. –

Смежные вопросы