Как передать данные из DetailView в TableView?

Я новичок в этом. У меня есть приложение с табличным представлением, где, когда я нажимаю на ячейку, оно ведет меня к DetailView. Теперь проблема в том, что у меня есть textField в Detailview, и я хочу загрузить данные, которые пользователь ввел обратно в сегмент detailTextLabel исходной ячейки после того, как я нажму кнопку сохранения.

Как мне это сделать? Ниже то, что у меня есть:

DetailViewController.m

//save button
-(IBAction) SendTextFieldtoViewController:(id)sender { 

    NSString *grabKeyedData = self.inputField.text;
    ViewController *mainController =[self.storyboard instantiateViewControllerWithIndentfier:@"mainController"];

    [mainController GrabbedKeyData: grabKeyedData];
}

ViewController.m

-(void) GrabbedKeyData:(NSString *)text{

    grabData = text;

    NSLog(@" data: %@",text);
    [tableView reloadData];
}


-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {

.....

  if(grabData == nil){
      [[cell detailTextLabel] setText:@"no data"];
  }else{
      [[cell detailTextLabel] setText:grabData];
  }

Мне удалось передать данные -(void) GrabbedKeyData, и я могу прочитать переданные данные из NSLog. Но таблица не обновляется, когда я возвращаюсь назад к ViewController.

2 ответа

Решение

Я думаю, что проблема может быть одной из двух вещей. В своем вопросе вы говорите "вернуться назад к ViewController", но вы не возвращаетесь к тому, с чего начали, а создаете новый. Если вы попали в детальный контроллер, нажав на ViewController в раскадровке, то это не способ сделать это. Вам необходимо получить ссылку на исходный экземпляр ViewController или использовать протокол (который Apple рекомендует использовать для отправки данных обратно в контроллер). Есть несколько способов получить эту ссылку, вы можете иметь свойство в подробном контроллере, скажем, mainController, скажем, и ViewController может установить себя в качестве значения этого свойства, когда он толкает подробный контроллер.

Другая возможная проблема - простая: в таблице используется обычная ячейка, а не та, в которой есть detailTextLabel. Убедитесь, что вы установили правильный тип ячейки в IB.

-(IBAction) SendTextFieldtoViewController:(id)sender 
{ 
    NSString *grabKeyedData = self.inputField.text;
    [mainController GrabbedKeyData: grabKeyedData];
    ViewController *mainController =[self.storyboard instantiateViewControllerWithIndentfier:@"mainController"];
}


-(void) GrabbedKeyData:(NSString *)text
{
  self.keyDataArray = [[NSMutableArray alloc] initWithObjects:text, nil];
  NSLog(@" data: %@",text);
  [tableView reloadData];
}

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {

.....

  NSString *grabbedName = [keyDataArray objectAtIndex:0];
  NSLog(@" cell text is :%@",grabbedName);

  [[cell detailTextLabel] setText:grabbedName];
}

Вы сохраняете только объект NSString в файле array.so, он хранится в массиве с нулевым индексом.

Другие вопросы по тегам