簡體   English   中英

如何在UIPageViewController中的UIViewControllers之間傳遞數據並保存變量

[英]How should I pass data between UIViewControllers in UIPageViewController and save variables

我在弄清楚如何在UIPageViewController中的UIViewController之間保存/傳遞數據時遇到了麻煩。 我的設置是這樣的:

#pragma mark - UIPageViewControllerDataSource

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{

    //This is nice and avoids having to use a counter
    NSString *vcRestorationID = viewController.restorationIdentifier;
    NSUInteger index = [self.controllerRestorationIDs indexOfObject:vcRestorationID];

    if (index == 0) {
        return nil;
    }

    return [self viewControllerAtIndex:index - 1];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSString *vcRestorationID = viewController.restorationIdentifier;
    NSUInteger index = [self.controllerRestorationIDs indexOfObject:vcRestorationID];

    //Don't allow it to go forward if there is one at the end
    if (index == self.controllerRestorationIDs.count - 1) {
        return nil;
    }

    return [self viewControllerAtIndex:index + 1];
}


#pragma mark - Private Methods

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
    // Only process a valid index request.
    if (index >= self.controllerRestorationIDs.count) {
        return nil;
    }

    // Create a new view controller.
    //Note this is just an extension of UIViewController with a variable inside. All my view controllers in this must be subclassed off BaseContentViewController
    BaseContentViewController *contentViewController = (BaseContentViewController *)[self.storyboard instantiateViewControllerWithIdentifier:self.controllerRestorationIDs[index]];

    // Set any data needed by the VC here
    contentViewController.rootViewController = self;

    return contentViewController;

}

這在我的RootViewController.m(包含UIPageViewController的控制器)中。 我需要做的是,將新變量刷入時,將變量或數據保存在當前顯示的控制器中。 我是否需要為此使用單例?

嘗試在* ViewController中使用NSNotificationCenter類

如果您只需要來回傳遞少量信息並且需要同時將其傳遞到多個目的地,則NSNotificationCenter可能是最快的實現。 如果在極有可能的情況下,您需要經常更新信息並僅在必要時引用它,那么單例將是更實用的解決方案。

單例令人驚訝地易於使用和實現。 快速的Google搜索將本演練作為第一個結果 這將向您展示如何設置它,並且使用它與在視圖控制器中使用任何其他屬性非常相似。

要在NSNotificationCenter運行可能需要花費額外的幾分鍾時間,但是它更具擴展性,可讀性和可維護性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM