我的工作流程设置如下:
导航控制器
-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访问一个属性。我怎么能这样做?
我是否也需要将属性传递给这些控制器,或者我可以直接从其父级访问它?
答案 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上使用变量或值,那么我会建议使用单例。希望这有帮助