2013-08-29 1 views
0

В моем приложении есть два компонента: UItableView и UIButton.Использование UIButton для обновления содержимого UItableViewCell

UItableViewcell загрузит данные из удаленной базы данных, выполненные JSON.

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

if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:TableIdentifier] autorelease]; 
} 
NSDictionary *voc_list=[listData objectAtIndex:indexPath.row]; 
NSLog(@"%@",voc_list); 
cell.textLabel.text = [[(NSDictionary*)voc_list objectForKey:@"vocabulary_list"]objectForKey:@"Vocabulary"]; 
cell.detailTextLabel.text=[[(NSDictionary*)voc_list objectForKey:@"vocabulary_list"]objectForKey:@"Translation"]; 

cell.textLabel.font = [UIFont boldSystemFontOfSize:15]; 


return cell; } 

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

-(IBAction)historyPressed:(id)sender{ 
    isToogle = !isToogle; 
    if(isToogle){ 
      // Back to original table content 

    }else{ 

     // Following codes will communicate with remote server and filter data to the app. 
     // The app go smooth here.  

     NSError *error = NULL; 
     NSDictionary *getStuID=[NSDictionary dictionaryWithObjectsAndKeys:student_id,@"Stu_ID", nil]; 
     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:getStuID options:NSJSONWritingPrettyPrinted error:&error]; 
     [self sendTOcompareByJSON:jsonData]; 



     //Following codes are trying to show/refresh the data on tableview, but the app will go crash. 
     CGPoint location   = [sender locationInView:self.table]; 
     NSIndexPath *indexPath  = [self.table indexPathForRowAtPoint:location]; 
     UITableViewCell *new_cell=[self.table cellForRowAtIndexPath:indexPath]; 



     historyList_= [NSArray arrayWithArray:personalized_history]; 
     NSDictionary *dic = [historyList_ objectAtIndex:indexPath.row]; 
     new_cell.textLabel.text=[[(NSDictionary*)dic objectForKey:@"history_list"]objectForKey:@"Vocabulary"]; 
     new_cell.detailTextLabel.text=[[(NSDictionary*)dic objectForKey:@"history_lsit"]objectForKey:@"Score"]; 


    } 


    } 
+0

У вас есть простая возможность обновлять данные, используемые в источниках данных таблицы, и перезагружать всю таблицу. – ratul

ответ

0

В historypressed метод просто попытаться вызвать [yourtableview reloaddata ] .. После того, как ваша настройка содержимого ячейки будет перезагружена, она обновит представление таблицы.

+0

Я просто добавлю метод [self.table relaodData], но он по-прежнему сбой. – Tek

+0

Вы устанавливаете данные для определенной строки с помощью метода cellforrowatindexpath? Сколько у вас строк и сколько строк вы устанавливаете? Если вы допустили 10 строк, и вы установили данные для 1 строки, это сработает. Попробуйте установить данные для всех строк atlease. Попробуйте выполнить хранение данных json и настройку данных в методе cellforrowatindexpath. Там вы не можете пропустить ни одну клетку. – NHS

+0

У меня есть причина, по которой приложение попадает в ваш комментарий. Но я не собираюсь устанавливать данные для всех строк. В методе table-: (UITableViewCell *) tableView: 'он поможет мне установить все данные в каждую ячейку. Должен ли я использовать цикл for в действии кнопки для выполнения эффекта? Я новичок, надеюсь, вы не возражаете против этой тривиальной проблемы. – Tek

0

Я не знаю, как вы получаете данные от [self sendTOcompareByJSON:jsonData];. Если это вызов синхронизации, для веб-сервера, то вы можете просто обновить свой источник данных (в случае ура вы заполняете таблицу с помощью listData) сразу после этого. Так как после обновления listData с новым содержимым, вы должны перезагрузить табличное представление следующим образом [self.table reloadData]

Если его асинхронный вызов на веб-сервер, то обновите источник данных и перезагрузите таблицу при обратном вызове.

Надеюсь, это поможет.

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