【发布时间】:2012-02-28 21:05:04
【问题描述】:
有比我知识渊博的人为我解释performSegueWithIdentifier:sender: 吗?我需要切换视图(和类),并将一些 NSString 和 ID 传递到该视图的类。我想知道performSegueWithIdentifier:sender: 是否可以做到这一点
谢谢!
【问题讨论】:
标签: ios objective-c xcode uikit segue
有比我知识渊博的人为我解释performSegueWithIdentifier:sender: 吗?我需要切换视图(和类),并将一些 NSString 和 ID 传递到该视图的类。我想知道performSegueWithIdentifier:sender: 是否可以做到这一点
谢谢!
【问题讨论】:
标签: ios objective-c xcode uikit segue
首先,您必须在情节提要中设置转场并为其提供适当的标识符。 (点击 segue(左面板),然后点击 Attributes(右面板)。
然后,您可以将其链接到故事板中的按钮或选择的表格行,或者您可以使用 performSegueWithIdentifier:sender: 在代码中调用它。
之后,您的视图控制器将收到prepareForSegue:sender: 消息。您可以在视图控制器子类中覆盖此方法,并且可以按如下方式配置目标视图控制器:
TargetViewController *targetVC = (TargetViewController*)segue.destinationViewController;
targetVC.string1 = string1;
等等。此方法中的sender 将是您在原始方法调用中用作sender 的对象。
【讨论】:
大多数 segues 是由于某些用户交互而自动启动的。例如,如果您有一个从按钮连接到情节提要中的场景的转场,当点击按钮时,转场将自动启动。
有时,以编程方式触发 segue 是有意义的——例如您有一个高分场景,当用户赢得一轮游戏时会显示该场景。在情节提要本身中无法表达获胜的概念,因此您可以创建一个 segue,为其分配一个标识符,然后在运行时调用 -performSegueWithIdentifier:sender:。
UIViewController 上的另一个与 segue 相关的方法 -prepareForSegue:sender: 是您应该重写以在目标视图控制器上执行任何自定义的方法。
【讨论】:
在prepareForSegue:sender: 中,您有机会配置destinationViewController:您可以在其中向其传递所需的数据。在Cocoa Application Competencies for iOS 中讨论过。
【讨论】:
今天我遇到了 performSegueWithIdentifier 的问题:由于没有在我的 URL 会话上设置委托队列,所以没有执行。
因此,无论如何,在创建 URLSession 时检查您是否真的设置了委托队列,否则 URLSession 将创建它自己的。
urlSession = [NSURLSession sessionWithConfiguration:sessionConfigObject
delegate:self
delegateQueue:[NSOperationQueue mainQueue]];
我在这里提到这一点是因为我经常看到 URLSession 处理最终会调用某种与 UI 相关的活动。并且 performSegue 需要在 main 上执行,否则它将什么都不做。
【讨论】: