【问题标题】:Understanding performSegueWithIdentifier了解 performSegueWithIdentifier
【发布时间】:2012-02-28 21:05:04
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: ios objective-c xcode uikit segue


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢!这实际上解释了很多! :)
    • 我做了 (Myclass *)nextViewController = segue.destinationViewController; nextView.textfield1.text = @"测试";但是 xcode 有问题 (Myclass *)nextViewController
    • MyClass 必须是 UIViewController 的子类。 Segue 适用于新的视图控制器,而不是视图。
    • 感谢您的帮助,我提到的是 UIViewController,而不是视图,很抱歉造成混淆。
    • 我得到“使用未声明的标识符“nextViewController”所以我给了 IB 中的 ViewController 那个标识符,但它仍然说:(
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      prepareForSegue:sender: 中,您有机会配置destinationViewController:您可以在其中向其传递所需的数据。在Cocoa Application Competencies for iOS 中讨论过。

      【讨论】:

      • 感谢您的链接和信息,我会通读的。感谢您的努力。
      【解决方案4】:

      今天我遇到了 performSegueWithIdentifier 的问题:由于没有在我的 URL 会话上设置委托队列,所以没有执行。

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-02-14
        • 2012-01-17
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 2016-02-15
        • 1970-01-01
        • 2015-12-18
        • 2012-05-01
        相关资源
        最近更新 更多