【问题标题】:How to pass data between modal view controller如何在模态视图控制器之间传递数据
【发布时间】:2012-07-12 04:53:37
【问题描述】:

这是一个菜鸟问题。我想要将数据从我的 QuizViewcontroller 传递到 QuizModalViewController。我成功地创建了一个普通的模态视图控制器,但是在两者之间传递数据时遇到了问题。下面是我的代码。

QuizViewController

-(IBAction)button3Clicked:(id)sender
{
  QuizModalViewController *mvid=[[QuizModalViewController alloc]initWithNibName:@"QuizModalViewController" bundle:nil];
mvid.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:mvid animated:YES];
}

QuizModalViewController

- (IBAction)goBackToView
{
[self dismissModalViewControllerAnimated:YES];
//[controller loadQuestion:currentQuestionIndex+1];
}

【问题讨论】:

标签: objective-c xcode


【解决方案1】:
-(IBAction)button3Clicked:(id)sender
{
  QuizModalViewController *mvid=[[QuizModalViewController alloc]initWithNibName:@"QuizModalViewController" bundle:nil];
mvid.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
mvid.theDataYouWantToPass = theData; // this is how you do it
[self presentModalViewController:mvid animated:YES];
}

请注意,theDataYouWantToPass 必须是在 QuizModalViewController.h 文件中声明的属性。

【讨论】:

  • 这是最好的方法。
  • @property (nonatomic) NSInteger myInteger;
  • 天啊。我不知道为什么这不起作用,最后你的注释提醒我通过将属性放在实现文件中将它们设为私有。谢谢!
【解决方案2】:

您还可以使用 -(void)prepareForSegue:... - 方法在控制器之间共享数据。

例如:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

   if ([segue.identifier isEqualToString:@"Your_Identifier"]) {

     TestViewController *controller = [segue destinationViewController];

     NSArray *array = [[NSArray alloc] initWithObjects:@"",nil];

     controller.objectInTestViewController = array;

   }
}

希望这对某人有所帮助....

【讨论】:

  • 我不认为 prepareForSegue 在使用 presentModalViewController 时会被解雇,因为它是一种执行故事板转场的程序化方式。
【解决方案3】:

使您的QuizModalViewController 在类范围内可用,而不是使用局部变量。 然后在goBackToView: 中,您可以在关闭控制器之前访问控制器的内容。

顺便说一句:在你的代码中你泄露了mvid。模态呈现后释放。

【讨论】:

  • 你能给我一个小例子吗
  • 你应该可以在 SO 上找到足够多的例子,比如这里 stackoverflow.com/questions/8706281/… 或那里 stackoverflow.com/questions/8788294/…
  • 问题几乎是如何将数据传递给模态视图控制器,而不是如何从中获取数据。所以委托不是这里的答案。自定义初始化方法或属性是。
  • 他可能没有泄漏,因为他可能正在使用 ARC
猜你喜欢
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多