理解 performSegueWithIdentifier

50

有没有比我更了解 performSegueWithIdentifier:sender: 的人能为我解释一下呢?我需要切换视图(和类),并且还要传递一些NSString和ID到那个视图的类中。我想知道是否可以使用 performSegueWithIdentifier:sender: 来实现这个功能。

谢谢!

4个回答

77

首先,您必须在故事板中设置segue并赋予其适当的标识符。(单击segue(左侧面板),然后单击属性(right panel))。

然后,您可以在故事板中将其链接到按钮或选择表行,也可以使用performSegueWithIdentifier:sender:在代码中调用它。

完成这些步骤后,您的视图控制器将收到prepareForSegue:sender:消息。您可以在视图控制器子类中重写此方法,并配置目标视图控制器如下:

TargetViewController *targetVC = (TargetViewController*)segue.destinationViewController;
targetVC.string1 = string1;

等等再说。在这个方法中,sender 将会是你在原始方法调用中使用的对象。


谢谢您的帮助,我是指UIViewController,而不是视图,对混淆感到抱歉。 - Simon Barkhuizen
我得到了“使用未声明的标识符“nextViewController”的错误,因此我在IB中将ViewController命名为该标识符,但它仍然显示相同的错误:(” - Simon Barkhuizen
@jrturton,把它链接到按钮或表格行选择和在代码中使用performSegueWithIdentifier:sender:调用有什么区别吗?谢谢。 - Jake Lin
@jrturton 我在 Stack Overflow 上有一个问题 https://dev59.com/8HXYa4cB1Zd3GeqP-tTU。看起来我想要以编程方式调用 performSegueWithIdentifier:sender:,但是 prepareForSegue:sender: 方法仍然被其他地方调用了。你能否给一些提示?谢谢。 - Jake Lin
如果有人想知道如何在Storyboard中创建segue,请查看https://dev59.com/Gmkw5IYBdhLWcg3wwNN5#17012857。 - ThE uSeFuL
显示剩余5条评论

9
大多数segue是由某些用户交互自动发起的。例如,如果您有一个从按钮到storyboard中场景的segue,当点击该按钮时,segue将自动启动。
偶尔地,通过编程方式触发segue是有意义的 - 比如说,当用户赢得游戏回合时,显示一个高分场景。在storyboard本身中无法表达获胜的概念,所以您可以创建一个segue,为其分配一个标识符,并在运行时调用-performSegueWithIdentifier:sender:方法。
UIViewController上的另一个与segue相关的方法-prepareForSegue:sender:,是您应该重写以对目标视图控制器执行任何自定义操作的方法。

3
prepareForSegue:sender: 中,您有机会配置 destinationViewController:那里您可以传递所需的数据。在iOS的Cocoa应用程序能力中讨论过这个问题。

感谢提供链接和信息,我会详细阅读的。非常感谢你的努力。 - Simon Barkhuizen

-1
今天我遇到了一个问题,即 performSegueWithIdentifier: 由于没有在我的URL会话上设置委托队列而无法执行。
因此,请不要错过任何机会,在创建URLSession时检查是否实际上设置了委托队列,否则URLSession将自行创建。
urlSession = [NSURLSession sessionWithConfiguration:sessionConfigObject
                                           delegate:self
                                      delegateQueue:[NSOperationQueue mainQueue]];

我在这里提到这个是因为我经常看到URLSession处理最终会调用一些与UI相关的活动。而performSegue需要在主线程上执行,否则它将什么都不做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接