今天我会问你是否有办法调用另一个视图控制器的方法而不是初始化它,或者只是如何将viewController作为在.h文件中声明的全局变量。 请帮帮我。 我正在使用PageViewController,我必须使用初始化的contentViewController alredy方法。
这里我创建了我的ViewControllers:
- (void)createTheContent {
NSLog(@"createTheContent");
pageController = nil;
//[pageController removeFromParentViewController];
//[pageController awakeFromNib];
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMin] forKey: UIPageViewControllerOptionSpineLocationKey];
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options: options];
pageController.dataSource = self;
[[pageController view] setFrame:CGRectMake(0, 0, 320, 365)];
initialViewController = [self viewControllerAtIndex:0];
NSMutableArray *viewControllers = [NSArray arrayWithObject:initialViewController];
[pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:pageController];
[[self view] addSubview:[pageController view]];
[pageController didMoveToParentViewController:self];
}
这是我在.h文件中的属性:
contentViewController *initialViewController;
}
//Page View Controller Properties
@property (strong, nonatomic) UIPageViewController *pageController;
@property (strong, nonatomic) NSArray *pageContent;
@property (strong, nonatomic) NSMutableArray *pageStrings;
@property (strong, nonatomic) id dataObject;
答案 0 :(得分:1)
从您的问题标题中,您似乎正在尝试访问控制器以获取某些数据。
在这种情况下,我的建议是在您的设计中创建一个“模型”(如在模型 - 视图 - 控制器中),并使您的应用程序中的任何位置都可以访问该模型。完成后一点的简单方法是使模型类成为单例;或者你可以使它成为一个只有类方法的类来提供对数据的访问。有关示例代码的相同问题,另请参阅this other answer of mine。
阅读完编辑后,我会建议如下:
在您的contentViewController
课程中添加一个属性dataSource
;
dataSource
属于contentViewControllerDataSource
类型,提供了访问所有必需数据的方法,例如:
@protocol contentViewControllerDataSource <NSObject>
-(NSString*)textViewContent;
@end
在将contentViewController
添加到页面控制器之前,设置其dataSource
属性:
initialViewController = [self viewControllerAtIndex:0];
initialViewController.dataSource = self;
NSMutableArray *viewControllers = [NSArray arrayWithObject:initialViewController];
[pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
让您的self
控制器实施contentViewControllerDataSource
协议:
@interface DonKnowTheNameOfThisOne : UIViewController <contentViewControllerDataSource>
....
@implementation DonKnowTheNameOfThisOne;
...
- (NSString*)textViewContent {
return value;
}
contentViewController
的您可以致电:
NSString* textViewContent = self.dataSource.textViewContent;
或:
self.dataSource.textViewContent = @"NEWVAL";
希望这有帮助。
编辑:
查看文件后:
请删除#import "ViewController.h"
开头的contentViewController.h
指令。这应该可以解决你遇到的问题。
另一件事:我在第1点写道,contentViewController
拥有属性dataSource
; ViewController
实现contentViewControllerDataSource
协议并托管contentViewController
想要访问的数据。一类是数据的“客户”;另一个通过您可以从外部修改的委托协议“共享”数据。在您的代码中,dataSource
和协议都分配给同一个ViewController
类,这没有任何意义。所以,你可以尝试修复它:我不确定现在哪个班级应该做什么,但你知道,我希望。