访问页面视图控制器上的属性

时间:2013-11-07 19:27:38

标签: ios ios6 uiviewcontroller ios7 uipageviewcontroller

我的工作流程设置如下:

导航控制器
-VC1
-Vc2
-Vc3
-PageVC
--VC4
--VC5

我通过第一个控制器直到PageVC传递一个对象,例如UIImage引用。在这里,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访问一个属性。我怎么能这样做?
我是否也需要将属性传递给这些控制器,或者我可以直接从其父级访问它?

2 个答案:

答案 0 :(得分: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中。

我希望这很有用

答案 1 :(得分:0)

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

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

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

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