我正在尝试在故事板中的UIViewControllers之间传递一些数据。我在下面有一些代码来传递数据。当我记录我在原始屏幕上保存的字符串时,它很好,但当我转到UIDetailViewController
时,go返回(null)
。我的问题是什么?
原始视图控制器:
-(void)tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView==_countryTableView) {
if (indexPath.section==0) {
AthleteDataTransfer *dataTransfer = [[AthleteDataTransfer alloc] init];
dataTransfer.name=@"Yo";
dataTransfer.dob=@"01/01/2000";
dataTransfer.description=@"I am awesome";
dataTransfer.hometown=@"Launy";
NSLog(@"%@", dataTransfer.name);
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
}
}
详情视图控制器:
AthleteDataTransfer *dataTransfer = [[AthleteDataTransfer alloc] init];
_name.text=dataTransfer.name;
dataTransfer.dob=_dob.text;
dataTransfer.description=_description.text;
dataTransfer.hometown=_hometown.text;
NSLog(@"%@", dataTransfer.name);
答案 0 :(得分:5)
不是在tableView didSelectRowAtIndexPath 中传递数据,而是传递 prepareForSegue 方法中的数据。
像这样:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showDetail"]) {
AthleteDataTransfer *dataTransfer = (AthleteDataTransfer *)[segue destinationViewController];
dataTransfer.name=@"Yo";
dataTransfer.dob=@"01/01/2000";
dataTransfer.description=@"I am awesome";
dataTransfer.hometown=@"Launy";
}
}
答案 1 :(得分:3)
您应该使用prepareForSegue
方法来完成此任务。
如果您从此ViewController中有多个segues,则可以使用segue.Identifier
来区分
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if(segue.identifier==@"yoursegueidentitifer")
{
DetailedViewController *detailController = [segue destinationViewController];
detailController.nameoftextview.text =self.textViewName.text;
}
}
答案 2 :(得分:3)
正如其他答案所示,您应该使用prepareForSegue
方法传递数据。我不打算在这里重复相同的代码。我想指出一件你不想在detailViewController中再次创建DetailViewController
的事情,如下所示
AthleteDataTransfer *dataTransfer = [[AthleteDataTransfer alloc] init]; // This is wrong and not required at all
NSLog(@"%@", dataTransfer.name);
相反,您应该使用self
来引用当前控制器
NSLog(@"%@", self.name); // This would be enough
答案 3 :(得分:1)
要将文本数据发布到目标View Controller,您可以像这样使用prepareForSegue
方法。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
DestinationViewController *destController = [segue destinationViewController];
destController._yourTextView.text == _yourText.text;
}
}
在这里,DesctinationViewController是您希望传递值的控制器到,在下一步中,您可以使用其对象和在该控制器上声明的属性来分配值。
由于您使用的是performSegueWithIdentifier
,因此会在prepareForSegue
执行后自动调用performSegueWithIdentifier
,这将显示目标视图控制器。