【问题标题】:Return for a push segue返回推送序列
【发布时间】:2013-04-22 15:31:48
【问题描述】:

我是故事板的新手,我正在尝试在表格视图控制器之间移动。

我了解如何设置 segue 以及如何将数据发送到新故事板,但我的问题是返回数据。如果我使用 push 风格的 segue,它会给我一个自动后退按钮。我想要一个页面,它会创建一个“工作”并在他们点击保存时保存它(我在标题的另一侧创建的条形按钮)当我设置 segue 以从保存按钮返回主页时使那个主表视图控制器成为一个孩子(而不是简单地回到它的原始状态)。我正在考虑的解决方法是在他们点击保存时将其保存到文件中,并且每当他们加载主表视图时,它都会从该文件加载。这是一种常见且正确的方法,还是我应该尝试返回该对象并将其保存在主表视图控制器中?

【问题讨论】:

    标签: objective-c storyboard segue


    【解决方案1】:

    如果您正在制作一个转场以“返回”到控制器,那么该转场需要是一个展开转场。 unwind segue 会返回到您最初来自的控制器的同一实例。如果您需要将数据发送回该控制器,您可以在 prepareForSegue 中完成。

    【讨论】:

    • 这是有道理的,我不知道 unwind segues。将其保存为子表视图控制器然后在我返回时将其重新加载到主视图控制器中是否有任何问题,或者是否有更好的方法来保存数据?
    • @ChewOnThis_Trident,我不确定你的意思。您是想保存数据以便在主控制器中读取数据,还是出于其他原因需要保存?
    • 我正在制作一个估算应用程序,用户可以添加工作。一旦他完成了这项工作,他就可以接受这项工作并为其添加估算项目(材料、每小时成本和诸如此类的东西)所以我想创建工作并保存它,然后能够从主页访问它并进一步编辑它(通过添加可以保存到该工作的估计任务)。在设置页面中用户可以设置任务以及它们的成本和使用的测量单位(时间、长度、平方英尺、百分比等)。所以我在考虑让每个页面都能够保存各自的对象。
    【解决方案2】:

    一种常见的方法是使用委托。由于 ViewController 应该尽可能独立,因此我们必须尽量减少它们之间的依赖关系。实际上,如果我理解正确,您对文件的想法也是如此。但是使用文件来组织 ViewController 之间的通信并不是很方便。 通常你为你的第二个 ViewController 声明一个 @protocol SecondViewControllerDelegate (你点击一个“保存”按钮)。使用如下方法:

    @protocol YourSecondViewControllerDelegate <NSObject>
    -(void)yourSecondViewControllerDidCancel:(YourSecondViewController*)controller; //if you have a cancel button
    -(void)yourSecondViewControllerDidFinish:(YourSecondViewController*)controller yourDataToReturn:(SomeData*)data andSomeMoreData:(AnotherDataType*)data2;
    @end
    

    然后您将这样的属性添加到您的 SecondViewController:

    @property (nonatomic, assign) id<YourSecondViewControllerDelegate> delegate; //Do not retain it!
    

    然后你在 MainViewController 中采用你的协议。

    @interface MainViewController()<YourSecondViewControllerDelegate> //you can do it in the private category to keep the class interface clear.
    @end
    @implementation
    //don't forget to implement those methods here :)
    @end
    

    当您从 MainViewController 触发 segue 时,您可以将 MainViewController 设置为 SecondViewController 的委托:

    SecondViewController *destinationController = [[SecondViewController alloc] init]; //Just for example.
    destinationController.delegate = self;
    //trigger a segue :)
    

    当用户按下 SecondViewController 中的 Save 按钮时,您调用委托的 yourSecondViewControllerDidFinish:

    [self.delegate yourSecondViewControllerDidFinish: self yourDataToReturn: someData andSomeMoreDate: someMoreData];
    

    这样会调用 MainController 的 yourSecondViewControllerDidFinish 方法。你可以在那里选择 someData 和 someMoreData。

    您可以在本教程中获得有关它的更多详细信息: Apple's your second iOS app tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2012-06-27
      • 2019-01-20
      相关资源
      最近更新 更多