如何将数据从DetailView传递到TableView?

时间:2013-02-16 13:27:12

标签: ios tableview detailview pass-data

我是新手。我有一个带有Tableview的应用程序,当我按下一个单元格时,它会导航我到DetailView。现在的问题是我在Detailview中有一个textField,我想在按下保存按钮后将用户键入的数据加载回原始单元格的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 个答案:

答案 0 :(得分:1)

我认为问题可能是两件事之一。在你的问题中,你说“返回ViewController”,但你不会回到你开始的那个,你正在创建一个新的。如果你通过从故事板中的ViewController推送到达细节控制器,那么这不是这样做的方法。您需要获取对ViewController的原始实例的引用,或使用协议(这是Apple建议将数据发送回控制器的标准方式)。有几种方法可以获得该引用,例如,您可以在名为mainController的详细控制器中拥有一个属性,并且ViewController可以在推送详细控制器时将其自身设置为该属性的值。

另一个可能的问题是一个简单的问题 - 该表使用普通单元而不是具有detailTextLabel的单元。确保你在IB中设置了正确的单元格。

答案 1 :(得分:0)

-(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中,它存储在第0个索引的数组中。