我是新手。我有一个带有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时,表似乎没有从它更新。
答案 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个索引的数组中。