Max
Max

Reputation: 1349

prepareForSegue in SWRevealViewController with Swift

I'm trying to write prepareForSegue in SWRevealViewController with Swift. Here is my code:

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

In newViewController I have topText as NSString

Of course I got nil text because I should make SWRevealViewControllerSegue but I don't know how it should look in Swift

Upvotes: 2

Views: 2931

Answers (4)

Tom Holder
Tom Holder

Reputation: 231

This doesn't work with the latest version. The release notes state:

Took a cleaner approach to storyboard support. SWRevealViewControllerSegue is now deprecated and you should use SWRevealViewControllerSegueSetController and SWRevealViewControllerSeguePushController instead.

There aren't any swift examples anywhere I can find that explain this though.

The performBlock method no longer exists.

Appreciate any help. It seems impossible to do swift without first learning objective c at the moment :)

Upvotes: 1

user3905950
user3905950

Reputation: 31

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)
        }
    }

}

Upvotes: 2

Max
Max

Reputation: 1349

I've found the solution.

First of all need to configure SWRevealControllerSegue. In swift it should looks like:

    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)
        }
    }

Second. XCode beta works bad right now with IBOutlet and segue like this. With variable everything is ok.

Upvotes: 2

Ashley Mills
Ashley Mills

Reputation: 53121

What was newViewController? This should work:

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

Upvotes: 0

Related Questions