2015-08-10 5 views
2

У меня есть длинный список данных для отображения в UITableView. Одна ячейка таблицы содержит много вещей, таких как комментарии, доля и т. Д. Теперь, когда пользователю нравится сообщение в ячейке, оно reloadTableData и снова переходите к первому.

Например, пользователь прокрутил до 30 ячеек, а затем, как и 29-я ячейка, перезагрузит данные и снова вернется к началу.

Итак, как заставить его оставаться на том же месте после перезагрузки данных? Вот мой код:Обновить данные UITableView и прокрутить до последней выбранной ячейки

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
     return imagesArr.count; 
} 

А для implmemtation кнопки Like

кнопка
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
HomeCell *cellObj = (HomeCell*)[tableView dequeueReusableCellWithIdentifier:@"HomeCell" ]; 
cellObj.likeBtn.tag=indexPath.row; 
[cellObj.likeBtn addTarget:self action:@selector(loveButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
return cellObj; 
    } 

loveButtonClicked щелкнул.

-(void)loveButtonClicked 
{ 
    [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 

    NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:nil, nil]; 
    [[RRDataAcessLayer sharedDataAccessLayerManager]sendRequestToFetchHomeData:dict]; 
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    hud.mode = MBProgressHUDModeAnnularDeterminate; 
    // hud.labelText = @"Loading Data"; 

} 

Изображение ниже предоставит вам информацию. даны две ячейки, и когда отображается значок сердца, он перезагружается, чтобы обновить значение полной любви. image of app

+0

добавить свой код – hasan83

+0

@ hasan83 проверить мой обновленный вопрос. –

+0

add loveButtonClicked код – hasan83

ответ

2
  • Сохраненные отредактирован индекс в переменном
  • Получить indexpath для этого индекса
  • прокрутки в таблицу после того, как reoladdata этого индекс
NSIndexPath* ip = [NSIndexPath indexPathForRow:editedRowNumber inSection:0]; 
    [self.tableViewTimeline scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
  • Если ваша таблица вид имеет одну секцию y НУ может передать ноль, если имеет номер раздела, вы должны пройти раздел, в котором пользователь редактировать ячейки

подобного действия кнопки вы можете перегрузить ячейку без прокрутки, используя оба способа, а лучше просто перегружать выбранный индекс, как предполагает @Mhesh

int selectedIndex=(int) btn.tag; 
    int likes = [[self.arrayDataSource objectAtIndex:selectedIndex] intValue]+1; 
    [self.arrayDataSource replaceObjectAtIndex:selectedIndex withObject:[NSString stringWithFormat:@"%d",likes]]; 
    NSIndexPath* ip = [NSIndexPath indexPathForRow:selectedIndex inSection:0]; 
    /* 
    [self.refWeakTableView reloadData]; 
    [self.refWeakTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionNone animated:YES]; 
    */ 
    [self.refWeakTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:ip]withRowAnimation:UITableViewRowAnimationNone]; 

and cell for row method set like button tag 

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

    myTableViewCell *cell = (myTableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"myTableViewCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 
    } 
    // DataSourceModel* dbObject = (DataSourceModel*)[self.arrayDataSource objectAtIndex:indexPath.row]; 
    cell.myCellLabel.text = [NSString stringWithFormat:@"%@",self.arrayDataSource[indexPath.row]]; 
    int indexed = (int)indexPath.row; 

    cell.btnLike.tag = indexed; 


    return cell; 
} 
+0

, что может решить проблему. но он не должен существовать на первом месте. tableview должен поддерживать свою позицию прокрутки.это поведение по умолчанию на iOS – hasan83

+0

, тогда вы можете использовать параметр scrollPosition UITableViewScrollPositionNone –

0

Я рекомендовал бы кэшировать текущий выбор в didSelectedCellAtIndexPath в вашем контроллере, и если вы загрузите всю таблицу можно прокручивать до последних кэшированных indexPath с методами Tableview для прокрутки. :)

0

Вы не должны перезагружать все данные таблицы, а только нужные строки. Вы можете сделать это путем вызова этого метода на Tableview reloadRowsAtIndexPaths(_:withRowAnimation:)
Это перезагрузит только нужные клетки с нужной анимации без прокрутки сверху табличном

1

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

[self.tableView beginUpdates]; 
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPathOfYourCell, nil] withRowAnimation:UITableViewRowAnimationNone]; 
[self.tableView endUpdates]; 

Вы можете изменить UITableViewRowAnimation.

+0

, это кажется логичным. Позвольте мне попробовать. –

+0

Вы использовали приложение facebook? Тогда как это сделал facebook, когда вам что-то понравилось? Решение, которое вы предоставили, может работать, но в приложении много чего происходит, и я не могу понять, где разместить этот код. Потому что в 'cellForRowAtIndexPath' я не перезагружаю данные. –

+0

, когда вам нравится кнопка, и она вызывает функцию в этой функции, вам нужно найти индексный путь таблицы в соответствии с нажатой кнопкой, а затем написать всю свою логику и в конце функции записать вышеприведенный код. – Mahesh