使用segues的优点

时间:2016-01-14 13:20:58

标签: ios swift

我在故事板中创建了新的View Controller。现在我希望它出现在屏幕上。所有的书籍,教程,课程告诉我,我应该使用segues在控制器之间传输数据。为什么呢?

通常我会这样做:

let newViewController = self.storyboard.instantiateViewControllerWithIdentifier("newViewController") as NewViewController
self.presentViewController(newViewController, animated: true, completion: nil)

在我看来,这种方式更加明确和有用。我可以使用Interface Builder创建新场景,使用标识符命名它,并随时从故事板中获取它。

这种方法有什么问题?

3 个答案:

答案 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,因为屏幕上有一个箭头告诉你这个。