【问题标题】:prepareForSegue in SWRevealViewController with Swift使用 Swift 在 SWRevealViewController 中的 prepareForSegue
【发布时间】:2014-08-31 20:12:35
【问题描述】:

我正在尝试使用 Swift 将 prepareForSegue 写入 SWRevealViewController。 这是我的代码:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
{
    if(segue!.identifier == "segueName")
    {
        var someText = "Text"
        var rvc:newViewController = segue!.destinationViewController as newViewController
        rvc.topText = someText
    }
}

newViewController 我有topText 作为NSString

当然,我得到了 nil 文本,因为我应该创建 SWRevealViewControllerSegue,但我不知道它在 Swift 中应该是什么样子

【问题讨论】:

  • 问题是什么?
  • 如何在 Swift 中为 SWRevealViewController 使用 prepareForSegue?因为这段代码没有任何内容。
  • 当您在var someText = "Text" 行设置断点时,是否到达该断点?
  • 当然。此代码有效,但不“发送”“newViewController”中的文本
  • 为了清楚起见,总是以大写开头的类命名,以小写开头的实例。如果newViewController 是一个类,它应该是NewViewController

标签: swift swrevealviewcontroller


【解决方案1】:

我找到了解决办法。

首先需要配置SWRevealControllerSegue。快速它应该看起来像:

    if(segue.isKindOfClass(SWRevealViewControllerSegue))
    {
        var rvcs: SWRevealViewControllerSegue = segue as SWRevealViewControllerSegue
        var rvc:SWRevealViewController = self.revealViewController()

        rvcs.performBlock = {(rvc_segue, svc, dvc) in
            var nc:UINavigationController = dvc as UINavigationController
            rvc.pushFrontViewController(nc, animated: true)
        }
    }

第二。 XCode beta 现在与 IBOutletsegue 类似,效果不佳。有了变量,一切都好。

【讨论】:

  • 我知道是很久以前的事了,有些东西已经改变了,比如使用 SWRevealViewControllerSegueSetController 而不是 SWRevealViewControllerSegue 但你能告诉我为什么我在第 4 行出现错误说 SWRevealViewControllerSegueSetController没有名为performBlock的成员
【解决方案2】:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if(segue.isKindOfClass(SWRevealViewControllerSegue))
    {
        var rvcs: SWRevealViewControllerSegue = segue as SWRevealViewControllerSegue
        var rvc:SWRevealViewController = self.revealViewController()

        rvcs.performBlock = {(rvc_segue, svc, dvc) in
            var nc:UINavigationController = self.revealViewController().frontViewController as UINavigationController
            nc.setViewControllers([dvc], animated: true)
            self.revealViewController().setFrontViewPosition(FrontViewPositionLeft, animated: true)
        }
    }

}

【讨论】:

  • 这似乎是一个“仅代码”的答案。你能用几句话概括一下需要的改动吗?
【解决方案3】:

这不适用于最新版本。发行说明指出:

采用更简洁的方法来支持故事板。 SWRevealViewControllerSegue 现在已弃用,您应该改用 SWRevealViewControllerSegueSetController 和 SWRevealViewControllerSeguePushController。

我找不到任何快速的例子来解释这一点。

performBlock 方法不再存在。

感谢任何帮助。目前,如果不先学习目标 c,似乎不可能快速完成 :)

【讨论】:

    【解决方案4】:

    newViewController 是什么?这应该有效:

    override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
    {
        if(segue.identifier == "segueName")
        {
            let someText = "Text"
            let rvc = segue.destinationViewController as SWRevealViewController
            rvc.topText = someText
        }
    }
    

    【讨论】:

    • 不,它没有。因为 topText - 这是我的变量:在 newViewController 我有 @IBOutlet var topText: NSString
    猜你喜欢
    • 1970-01-01
    • 2015-03-05
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2014-09-02
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多