我已经开始学习ios了。我来自网络开发背景。
从ViewController或特定按钮使用segue时,我有点困惑。
例如:如果我有一个HomeViewController
,那么当我点按它时,我会有一个“同意条款”按钮,它会转到TermsViewController
。我应该从“同意条款”按钮创建segue还是选择整个ViewController(从顶部栏)?哪些是差异?
提前致谢
答案 0 :(得分:2)
我倾向于从视图控制器本身创建一个segue。
然后,您将为视图控制器上的按钮创建IBAction,并执行操作调用[self performSegueWithIdentifier:@"identifier"];
这或多或少正是从按钮创建segue的原因。如果这是100%所有你需要做的,那是完全可以接受的。但这是一个更易于维护的解决方案,因为它允许您轻松地向按钮添加其他功能。即,您的按钮要求您将对象保存到服务器。您希望在离开页面之前保存该对象,因此您将performSegueWithIdentifier
调用放在保存的完成块中。
此外,使用标识符从故事板创建segue允许您将该segue用于多个按钮。例如,假设您有一个带有4个按钮的视图控制器,这些按钮都会转到与该按钮相关的信息页面。您只需要在故事板上使用一个“goToInfo”segue,但是您可以为那些执行不同设置的按钮设置4个单独的IBAction,然后根据按钮的IBActions中设置的数据准备视图控制器。这将使您的故事板更清洁,因为您不需要在SB上可见的4个不同的segue,您只有1。
tl; dr - 从按钮创建segue是好的,只要这是100%按下按钮时唯一需要做的事情。如果在后台还有其他需要发生的事情,最好从VC创建segue,并在完成其他步骤后通过其标识符调用它。
编辑 - 我想我曾误导你。您可以做的一件事是覆盖方法-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
。你设置一个if / else if链来检查segue.identifier是否等于你设置标识符的字符串,并且你可以在这些块中执行各种逻辑,即使你将segue直接附加到按钮也会被调用。唯一的问题是它是一个void函数,并且在此之后将执行segue,无论您在页面上输入数据时遇到任何问题。
现在,我通常会覆盖此方法,以便我可以在VC之间传递数据。在将其转换为您知道的ViewController类之后,您可以在此处设置segue.destinationViewController
的属性。我不会在这里放任何繁重的逻辑,当然也没有服务器调用。那些情况你绝对想要从执行逻辑/服务器调用的按钮设置IBAction,并在完成后调用performSegue
并知道事情正常工作。
答案 1 :(得分:1)
它将调用您已分配给它的segue。
来自viewController的
你必须自己打电话给performSegue(withIdentifier: String, sender: Any?)