有人比我更了解我performSegueWithIdentifier:sender:
吗?我需要切换视图(和类),并将一些NSStrings和ID带到该视图的类。我想知道performSegueWithIdentifier:sender:
谢谢!
答案 0 :(得分:77)
首先,您必须在故事板中设置segue并为其指定适当的标识符。 (单击segue(左侧面板),然后单击“属性”(右侧面板)。
然后,您可以将其链接到故事板中的按钮或选择表格行,也可以使用performSegueWithIdentifier:sender:
在代码中调用它。
在此之后,您的视图控制器将发送prepareForSegue:sender:
消息。您可以在视图控制器子类中重写此方法,并可以按如下方式配置目标视图控制器:
TargetViewController *targetVC = (TargetViewController*)segue.destinationViewController;
targetVC.string1 = string1;
等等。此方法中的sender
将是您在原始方法调用中用作sender
的对象。
答案 1 :(得分:9)
大多数segues是由于某些用户交互而自动启动的。例如,如果您有一个从按钮连接到故事板中的场景的segue,当点击该按钮时,segue将自动启动。
偶尔,以编程方式触发segue是有意义的 - 例如你有一个高分数场景,当用户赢得一轮游戏时显示。没有办法在故事板本身中表达获胜的概念,因此您可以创建一个segue,为其分配一个标识符,并在运行时调用-performSegueWithIdentifier:sender:
。
UIViewController上的另一个与segue相关的方法-prepareForSegue:sender:
是您应该覆盖的方法,以便在目标视图控制器上执行任何自定义。
答案 2 :(得分:3)
在prepareForSegue:sender:
中,您有机会配置destinationViewController
:您可以在其中传递所需的数据。它在Cocoa Application Competencies for iOS中进行了讨论。
答案 3 :(得分:-1)
今天我遇到了performSegueWithIdentifier的问题:因为没有在我的URL会话上设置委托队列而没有执行。
因此,在创建URLSession时,请检查您是否实际设置了委托队列,否则URLSession将创建它自己的队列。
urlSession = [NSURLSession sessionWithConfiguration:sessionConfigObject
delegate:self
delegateQueue:[NSOperationQueue mainQueue]];
我在这里提到这个,因为我经常看到URLSession处理最终调用某种与UI相关的活动。并且performSegue需要在main上执行,否则它什么都不做。