我在故事板中创建了新的View Controller。现在我希望它出现在屏幕上。所有的书籍,教程,课程告诉我,我应该使用segues在控制器之间传输数据。为什么呢?
通常我会这样做:
let newViewController = self.storyboard.instantiateViewControllerWithIdentifier("newViewController") as NewViewController
self.presentViewController(newViewController, animated: true, completion: nil)
在我看来,这种方式更加明确和有用。我可以使用Interface Builder创建新场景,使用标识符命名它,并随时从故事板中获取它。
这种方法有什么问题?
答案 0 :(得分:2)
这种类型的连接称为segue并代表a 从一个屏幕转换到另一个屏幕。故事板连接 你到目前为止看到的是关系,他们描述了一种观点 控制器包含另一个另一方面,segue会发生变化 什么在屏幕上。通过按钮,表上的点击触发分段 查看单元格,手势等。
故事板羽毛用于传递数据,第四个用segue和unwind segue by destinationViewController和sourceViewController.identifier属性用于比较不同的屏幕。检查更多参考this。
Ex.Pass数据到下一个屏幕。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showRecipeDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
RecipeDetailViewController *destViewController = segue.destinationViewController;
destViewController.recipeName = [recipes objectAtIndex:indexPath.row];
}
}
Ex.Pass数据回屏,
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
SettingsViewController *settingsViewController = [segue sourceViewController];
[settingsViewController setAddressString:[self addressString]];
NSLog(@"Settings address string of SettingsViewController to: %@", [self addressString]);
settingsViewController.delegate = self;
}
答案 1 :(得分:2)
首先,当您使用segues时 - 您的故事板变得更具可读性。每个人都会看到,从这个控制器我可以导航到这个,从这个到这一个。这是segues的一个主要特征。从代码中可以更难理解某些控制器连接的控制器。 (换句话说,不需要使用故事板,可以从nib文件中实例化控制器)
如果它连接到某个动作UI(按钮,手势,单元格等),它也不需要编写额外的代码。
即使你需要调用“performSegue:”方法,它也比实例化控制器更好。在这种情况下,您可以在不更改代码的情况下更改segues类型,实例化是不可能的。
有很多人认为我们可以讨论,但总体思路是你在项目中导航的方式很有用,它可以帮助你减少依赖关系,从故事板中理解项目中的导航。
答案 2 :(得分:2)
你的方法没有错。正如完全删除UIViewController并自己处理UIWindow上的视图层次结构一样没有错。
如果您愿意,可以使用 UIStoryboardSegue
作为工具。它很有用,因为它允许您在视图控制器之间转换,如果需要,几乎没有代码。
例如,在我有一个应用程序(只是一个概念证明)中,我有一个UIViewController
,其中有几个按钮作为菜单,我可以通过每个按钮转换到其他UIViewControllers
。但是没有代码的子类。它完全在Interface Builder中完成。
它为故事板添加的内容是在哪里流动的清晰程度。你知道视图控制器A转换到视图控制器B,因为屏幕上有一个箭头告诉你这个。