【问题标题】:How to prevent Storyboard Segue from resetting UIViewController inside UIPopoverController如何防止 Storyboard Segue 在 UIPopoverController 中重置 UIViewController
【发布时间】:2012-01-11 01:21:39
【问题描述】:

这是我的问题。使用 Storyboard 的 segue,我有一个 bar button 的 popover segue。 UIPopoverController 中的 UIViewController 需要从服务器加载数据。使用 Storyboards,每次我关闭弹出框时,视图都会被释放,因此每当弹出框再次出现时,它都会尝试再次从服务器加载数据。我不想要这种行为。如何防止 Storyboard 重置弹出框控制器内的视图控制器?类似于 UITabBarController 所做的事情。 UITabBarController 第一次调用 viewDidLoad,后续的 tab 切换调用 viewWillAppear。

【问题讨论】:

    标签: ios ios5 uipopovercontroller storyboard


    【解决方案1】:

    Segue 就是这样设计的。每次你做 segue - 视图都会被加载。 如果您需要存储它的数据 - 您应该将其存储在弹出框之外并使用此方法

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
        if ([[segue identifier] isEqualToString:@"your segue identifier"])
        {
            //get popover
            ViewController *vc = [segue destinationViewController];
    
            //Set popover data to vc here
        }
    

    在 segue 之前调用,并在此方法中将数据设置为 popover。 如果您将使用它 - 不要忘记在 Interface Builder 中设置 Segue 标识符。

    【讨论】:

    • 但这会增加在视图控制器之外加载数据的额外复杂性。理想情况下应该在视图控制器中的加载数据的代码现在将在弹出框父控制器中。我通过不使用 segue 并总是手动创建弹出框来解决这个问题。但我真的很想能够使用 Segue。
    • 据我了解 - segue 总是会创建新的 ViewController。或者不要使用segue,或者知道这一点使用segue。但是您可以尝试使用自定义 segue,但我认为不会有任何改变。
    • 自定义 Seque 不是一种选择,因为使用 Segue 维护的任何东西在其工作完成后都会被释放。因此,当前的解决方案似乎根本不使用 Segues,而是以旧方式手动完成。
    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 2012-08-18
    • 1970-01-01
    • 2016-11-30
    • 2012-03-06
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多