在没有segue的情况下将数据传递给VC的最有效和最不受欢迎的方法是什么?

时间:2015-09-12 23:01:08

标签: ios swift uiviewcontroller

场景是我在故事板中有一个未连接的VC,我想要一遍又一遍地以编程方式呈现。从本质上讲,想象这个VC作为"回复" VC发表评论。你可以想象,所有回复都是一样的,所以我真的一遍又一遍地推动同一个VC,直到最后一条评论没有回复。

如果我错了,请纠正我,但我认为这是执行此类任务的最有效方式?我可以在需要时以编程方式调用相同的回复VC(甚至是自己)。我最关心的是如何在没有segue的情况下传递数据。我也不会滥用NSNotifications或全局,这些都是因为显而易见的原因弄乱了这样的任务......

想要一些想法?

2 个答案:

答案 0 :(得分:1)

您的第一个问题是如何保存指向此视图控制器的指针。如果始终从同一源视图控制器调用它,则可以使用instantiateViewControllerWithIdentifier创建它,并在实例变量中保留指向它的指针。然后你可以在想要显示它时显示/推送它。

一旦有了指针,只需在视图控制器中设置一个或多个属性,然后在调用它们之前设置它们:

targetViewController.inputData = dataIWantToPass
self.presentViewController(targetViewContrller, 
  animated: yes, 
  completion: nil)

或者,如果您需要从许多不同的地方调用ReplyVC,您可以将其设为单例,然后在准备推送/呈现控制器时使用单例类方法获取控制器。

答案 1 :(得分:0)

假设你要从不同的地方展示这个VC,我会创建一个UIViewController的扩展,例如:

extension UIViewController {
    static func loadReply(data data: String) {
        let identifier = "ReplyIdentifier"
        let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil)
        let replyVC = storyboard.instantiateViewControllerWithIdentifier(identifier) as! ReplyViewController
        replyVC.data = data
        return replyVC
    }
}

然后当你需要使用它时,你可以做到

let replyVC = UIViewController.loadReply(data: "yourData")
presentViewController(replyVC, animated: true, completion: nil)

请记住在Storyboard中设置ViewController的标识符。