在两个视图控制器之间实现segue时如何使用segue对象更改目标视图控制器的属性?文档说这可以在prepareForSegue:sender:方法中完成。我尝试了但不是没有成功
答案 0 :(得分:13)
Dunno如果你仍然需要一个答案,但这是一个如此孤独的帖子,如果我是正确的,这不再属于NDA。如果我弄错了,请将我的答案放在遗忘之中,所以我们走了:我刚刚完成了一些使用你需要的东西。这是适用于我的代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"relevantSegueIdentifier"])
{
// [segue destinationViewController] is read-only, so in order to
// write to that view controller you'll have to locally instantiate
// it here:
ViewController *upcomingViewController = [segue destinationViewController];
// You now have a solid reference to the upcoming / destination view
// controller. Example use: Allocate and initialize some property of
// the destination view controller before you reach it and inject a
// reference to the current view controller into the upcoming one:
upcomingViewController.someProperty = [[SomePropertyClass alloc] initWithString:@"Whatever!"];
upcomingViewController.initialViewController = [segue sourceViewController];
// Or, equivalent, but more straightforward:
//upcomingViewController.initialViewController = self;
}
}
这假设someProperty和initialViewController都是目标视图控制器的合成访问器。希望这有帮助!
答案 1 :(得分:5)
我编写了一个教程,提供了使用委托将信息传递到新场景和从场景返回的信息的代码示例,因此检查它应该可以解决您的问题。 iOS 5 Storyboard: How To use Segues, Scenes and Static Content UITableViews
答案 2 :(得分:0)
我制作了一个关于这个主题的视频。我希望它有所帮助。 http://full.sc/17yKkZF
答案 3 :(得分:0)
我在源视图控制器中使用的是:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIViewController *upcomingViewController = [segue destinationViewController];
upcomingViewController.view.tag = [[segue identifier] hash];
}
然后在我使用的目标视图控制器中(例如在viewDidAppear中使用)
if(self.view.tag == [@"MySeqgueIdentifier" hash])
{
// Do something here...
}
这很酷,因为您不必创建任何属性等,并且一切都可以从界面构建器中正常工作。