50

比我更有知识的人可以performSegueWithIdentifier:sender:为我解释吗?我需要切换视图(和类)并将一些 NSString 和 ID 传递到该视图的类。我想知道这是否可能performSegueWithIdentifier:sender:

谢谢!

4

4 回答 4

77

首先,您必须在情节提要中设置 segue并为其提供适当的标识符。(单击 segue(左面板),然后单击 Attributes(右面板)。

然后,您可以将其链接到故事板中的按钮或选择的表格行,或者您可以在代码中使用performSegueWithIdentifier:sender:.

在此之后,您的视图控制器将被发送prepareForSegue:sender:消息。您在视图控制器子类中覆盖此方法,并且可以按如下方式配置目标视图控制器:

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

等等。此方法中的 将是您在原始方法调用中sender用作的对象。sender

于 2012-02-07T12:34:29.790 回答
9

大多数 segues 是由于某些用户交互而自动启动的。例如,如果您有一个从按钮连接到情节提要中的场景的转场,当点击按钮时,转场将自动启动。

有时,以编程方式触发 segue 是有意义的——例如,当用户赢得一轮游戏时,会显示一个高分场景。没有办法在情节提要本身中表达获胜的概念,因此您可以改为创建一个 segue,为其分配一个标识符,然后-performSegueWithIdentifier:sender:在运行时调用。

UIViewController 上的另一个与 segue 相关-prepareForSegue:sender:的方法是您应该重写以在目标视图控制器上执行任何自定义的方法。

于 2012-02-07T17:27:34.750 回答
3

prepareForSegue:sender:您有机会配置destinationViewController: 时,您可以将所需的数据传递给它。它在Cocoa Application Competencies for iOS中进行了讨论。

于 2012-02-07T12:29:39.407 回答
-1

今天我遇到了 performSegueWithIdentifier: not execution 由于没有在我的 URL 会话上设置委托队列的问题。

因此,无论如何,在创建 URLSession 时检查您是否真的设置了委托队列,否则 URLSession 将创建它自己的。

urlSession = [NSURLSession sessionWithConfiguration:sessionConfigObject
                                           delegate:self
                                      delegateQueue:[NSOperationQueue mainQueue]];

我在这里提到这一点是因为我经常看到 URLSession 处理最终会调用某种与 UI 相关的活动。并且 performSegue 需要在 main 上执行,否则它将什么都不做。

于 2014-11-11T14:19:51.843 回答