在Swift中使用SWRevealViewController手动转场

8

http://www.appcoda.com/tag/swrevealviewcontroller/上有一篇非常好的博客文章,介绍了如何设置SWRevealViewController。这是一个很棒的侧滑菜单组件(https://github.com/John-Lluch/SWRevealViewController)。

不幸的是,没有Swift示例介绍如何手动执行Segue。

对Storyboard支持采用了更简洁的方法。 SWRevealViewControllerSegue现已作废,您应该使用SWRevealViewControllerSegueSetController和SWRevealViewControllerSeguePushController。

我尝试了以下类似的操作:

let navigationController = self.window?.rootViewController as! SWRevealViewController;

let viewController = navigationController.storyboard?.instantiateViewControllerWithIdentifier("ImportFileSelect") as! ImportFileSelect

navigationController.showViewController(viewController, sender: self)

然而这并不起作用。有什么想法吗?我已经在网上搜索了Swift的示例,下一步是学习Objective C!


你在哪里遇到了什么错误?请告诉我具体信息。 - EmirC
4个回答

12

为了使其工作,您需要执行以下步骤:

  • 您需要实例化SWRevealViewController,然后将其附加到根控制器。
  • 然后实例化目标控制器。
  • 然后创建导航控制器并将目标控制器设置为rootViewController。
  • 最后,使用SWReveal推送导航控制器。

let storyboard = UIStoryboard(name: "Main", bundle: nil)

let sw = storyboard.instantiateViewControllerWithIdentifier("SWRevealViewController") as! SWRevealViewController

self.view.window?.rootViewController = sw

let destinationController = self.storyboard?.instantiateViewControllerWithIdentifier("StoryboardID") as! NameOfViewController


let navigationController = UINavigationController(rootViewController: destinationController)



sw.pushFrontViewController(navigationController, animated: true)

这个对我来说是有效的,但在此之前,请确保故事板连接已断开。 - vijay
这个可以运行,但是我怎么让它在后视镜中反映出选择了哪个选项呢?例如,在菜单列表中是第三个选项? - Famic Tech

5

我已经有了一些进展。我可以加载一个新的视图控制器,但是它没有任何动画效果。点击按钮执行此操作的代码如下:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("TARGET_VIEW_CONTROLLER") as! UIViewController
var rvc:SWRevealViewController = self.revealViewController() as SWRevealViewController
rvc.pushFrontViewController(vc, animated: true)

0

这不是应该这样做的方式,但至少我找到了一种方法来实现它。

在TableViewController中,您可以像这样处理滑出菜单:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if(indexPath.row == <some position> ){
            let vc: AnyObject! = self.storyboard?.instantiateViewControllerWithIdentifier("YOUR_DESTINATION_IDENTIFIER")
            self.showViewController(vc as! SWRevealViewController, sender: vc)
        }

满足条件的那个将使用默认动画进行segue,而不像侧滑菜单通常所做的那样。

之后,在storyboard中,执行普通的Reveal View Controller Push控制器,只要不满足条件,它就会正常退出侧滑菜单。


0
  1. Github下载SWRevealViewController项目的zip文件。
  2. 将zip文件中的SWRevealViewController.m和SWRevealViewController.h文件(在SWRevealViewController文件夹中)拖到您的项目中,并单击“是”以响应提示消息“是否要配置Objective-C桥接标头?”
  3. 查看RevealControllerStoryboardExample2项目中的故事板。使用此示例设计您的故事板。

谢谢,但我特别问的是Swift。我可以在这里看到代码https://github.com/John-Lluch/SWRevealViewController/blob/master/RevealControllerExample2/RevealControllerProject2/RearViewController.m可能会做到这一点,但我无法将其翻译成Swift。 - Tom Holder
故事板不依赖于Swift或Obj-C。我的答案是针对Swift指定的,请看第二步。 - Vlad
你的链接是错误的,这个文件对你很有用 https://github.com/John-Lluch/SWRevealViewController/blob/master/RevealControllerStoryboardExample2/RevealControllerStoryboardExample2/en.lproj/MainStoryboard.storyboard 下载整个项目并查看。 - Vlad
1
抱歉,也许我没有表达清楚。在 Swift 项目中,我的项目运行得非常好。步骤1和2已经完成并且正常工作。但是我找不到手动执行segue的Swift代码示例。使用静态表格单元格内容时,我可以毫无问题地实现它。 - Tom Holder
不用了,谢谢,但那些都很好地运作了,而且相当容易。问题只在于如何在Swift中进行编程式的segue。其中一个链接有一点帮助,虽然我可能能够将其翻译成Swift,但我的Objective-C不是很好。 - Tom Holder
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接