【问题标题】:How to Segue to the same ViewController via multiple segues from the same TableViewController如何通过来自同一个 TableViewController 的多个 segue 到同一个 ViewController
【发布时间】:2012-07-20 23:13:40
【问题描述】:

我有一个静态 TableViewController,它有两个静态单元:一个出发机场和一个到达机场。两者都连接到另一个 TableViewController,它允许用户选择一个机场,并将原始 TVC 定义为将对象传回的委托。我不知道如何确定选择机场时正在设置的属性;选择通过代表传回时的出发或到达机场。我开始实现的是 AirportListTVC 上的一个属性,该属性通过 prepareForSegue 方法设置,然后在进行选择时传递回委托。有没有更好的办法?

【问题讨论】:

    标签: objective-c delegates viewcontroller segue


    【解决方案1】:

    向新的 UIViewController 传递信息通常很棘手 - 并且使用 Interface Builder 中的自动 segues 并不能真正让您轻松传递信息。基本上我会建议两种方法(听起来你正在使用一种):

    1) 使用 Interface Builder segues 并使用 prepareForSegue 将您拥有的任何信息传递给新的 UIViewController。

    2) 在 Interface Builder(标识符)中命名 UIViewController,然后使用instantiateViewControllerWithIdentifier 自己呈现它,如下所示 - 在这种情况下使用导航控制器呈现:

    UIStoryboard *storyboard = [viewController storyboard];
    MyViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MyVC"];
    [vc configureWithMyData:myData];
    [navigationController pushViewController:vc animated:YES];
    

    这是一个选择适合你的案例。显然你也可以完全在代码中创建控制器。

    这里有一些事情需要考虑 - 例如,这两种方法会导致新的 UIViewController 在不同点被实际初始化/viewDidLoad(如果有帮助,我可以对此进行扩展)。

    【讨论】:

    • 感谢您的回复。我实际上在执行 segue 和设置属性时没有问题。我想不通的是如何确定从 Master 到 Detail TVC 执行了哪个 segue,以便当 Detail TVC 将选择的值传递回 Master 时,我知道要设置哪个属性。我正在使用 CoreData 并共享一个托管对象上下文,如果这有助于我对如何实现这一点有不同的看法。现在我正在 Detail TVC 上设置一个属性,以便我知道执行了哪个 segue 并将其与 Detail TVC 上选择的值一起传回。
    • 您使用的是 MVC 设计模式吗? Detail TVC 更新模型,关闭,然后 Master VC 在模型重新出现时从模型中检索更新的信息。如果你在谈论两个信息,你可能只是更新视图......
    • 我正在使用 MVC 设计模式。在 MasterTVC 上,我在 MOC 中创建一个对象。然后我继续使用 DetailTVC 并且 DetailTVC 正在指定 Master TVC 作为它的委托,以将所选对象传递给以便可以将其保存到 MOC 中。我应该将指向 MasterTVC 中创建的对象的指针传递给 DetailTVC 并直接从 DetailTVC 更新模型吗?
    • 这很难说,但听起来更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多