【问题标题】:Getting access to property on Page View Controller访问页面视图控制器上的属性
【发布时间】:2013-11-07 19:27:38
【问题描述】:

我的工作流程设置如下:

导航控制器
-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 访问一个属性。我该怎么做?
我是否也需要将属性传递给这些控制器,或者我可以以某种方式直接从其父级访问它?

【问题讨论】:

  • VC4 和 VC5 是导航控制器还是页面视图控制器的子级?

标签: ios ios6 uiviewcontroller ios7 uipageviewcontroller


【解决方案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 中。

希望对你有用

【讨论】:

  • 该对象已经创建,并且在 PageViewController 中有一个属性,因此它已经可用,我认为我不需要这里的单例。我需要做的是从当前显示在 PageViewController 上的视图控制器访问属性,这可能吗?
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多