0

我的工作流程设置如下:

导航控制器
-VC1
-VC2
-VC3
-PageVC
--VC4
--VC5

我通过第一个控制器将一个对象(例如 UIImage 引用)传递给 PageVC。在这里,PageVC 会按如下方式加载控制器:

- (void) viewDidLoad {
    [super viewDidLoad];

    self.dataSource = self;

    _side = [self.storyboard instantiateViewControllerWithIdentifier: @"GuessGameTurnWordVC"];
    _center = [self.storyboard instantiateViewControllerWithIdentifier: @"GuessGameTurnMainVC"];

    [self setViewControllers: @[_center]
                   direction: UIPageViewControllerNavigationDirectionForward
                    animated: NO
                  completion: nil];
}

- (UIViewController*) pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    if ( viewController == _center )
    {
        _side.title = @"right";
        return _side;
    }

    if ( viewController == _side && [_side.title isEqualToString: @"left"] )
    {
        return _center;
    }

    return nil;
}

- (UIViewController*) pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    if ( viewController == _center )
    {
        _side.title = @"left";
        return _side;
    }

    if ( viewController == _side && [_side.title isEqualToString: @"right"] )
    {
        return _center;
    }

    return nil;
}

问题 在 VC4/VC5 中,我需要从 PageVC 访问一个属性。我怎样才能做到这一点?
我是否也需要将属性传递给这些控制器,或者我可以以某种方式直接从其父级访问它?

4

2 回答 2

1

使用 Singleton 设计模式,在您的 PageVC.m 中写入:

static NSObject yourObject;

@implementation PageVC

    +(NSObject*)getThisObject{
       if(!yourObject){
          yourObject = [[NSObject alloc] init];
          // init your object how you need it
       }
       return yourObject;
    }

@end

并在 PageVC.h 中写入:

+(NSObject*) getThisObject;

现在,您可以使用以下行在任何类中获取此属性:

NSObject *obj = [PageVC getThisObject];

但请记住将 PageVC.h 包含在其他 VC 中。

我希望这很有用

于 2013-11-07T20:20:13.130 回答
0

您可以直接从它的父母那里访问。对于父母,您的意思是它们是 PageVC 的子类?然后只需使用 VC4.propertyName 访问它,如果父母的意思是 NavigationController 中的 viewController 层次结构,那么您有不同的选择。

最简单的方法可能是在 VC4 和 VC5 中创建一个属性,然后在实例化它们时传递您想要使用的值。

_side = [self.storyboard instantiateViewControllerWithIdentifier: @"GuessGameTurnWordVC"];
_side.someValue = something;

如果您要在所有 VC 上使用变量或值,那么我建议您使用单例。希望这可以帮助

于 2013-11-07T20:22:06.453 回答