-1

今天我会问你是否有一种方法可以调用另一个视图控制器的方法而不是初始化它,或者只是如何将该视图控制器作为在 .h 文件中声明的全局变量。请帮帮我。我正在使用 PageViewController,我必须使用已经初始化的 contentViewController 的方法。

在这里我创建了我的 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;
4

1 回答 1

1

从您的问题标题来看,您似乎正在尝试访问您的控制器以获取一些数据。

在这种情况下,我的建议是在您的设计中创建一个“模型”(如在 Model-View-Controller 中),并让该模型可以从您应用程序的任何地方访问。完成后一点的一种简单方法是使模型类成为单例;或者你可以把它变成一个只有类方法的类来访问数据。对于某些示例代码,另请参阅的关于同一问题的其他答案。

阅读您的编辑后,我会建议以下内容:

  1. 给你的contentViewController班级添加一个属性说它dataSource

  2. dataSource是类型contentViewControllerDataSource并提供访问所有必需数据的方法,例如:

    @protocol contentViewControllerDataSource <NSObject>
      -(NSString*)textViewContent;
    @end
    
  3. 在添加contentViewController到页面控制器之前,设置它的dataSource属性:

    initialViewController = [self viewControllerAtIndex:0];
    initialViewController.dataSource = self;
    NSMutableArray *viewControllers = [NSArray arrayWithObject:initialViewController];
    [pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
    
  4. 让你的self控制器实现contentViewControllerDataSource协议:

    @interface DonKnowTheNameOfThisOne : UIViewController <contentViewControllerDataSource>
    
    ....
    
    @implementation DonKnowTheNameOfThisOne;
    
    ...
    - (NSString*)textViewContent {
       return value;
    }
    
  5. 您将contentViewController可以致电:

    NSString* textViewContent = self.dataSource.textViewContent;
    

    或者:

    self.dataSource.textViewContent = @"NEWVAL";
    

希望这可以帮助。

编辑:

查看您的文件后:

请删除#import "ViewController.h"开头的指令contentViewController.h。那应该可以解决您遇到的问题。

另一件事:我在第 1 点写了contentViewController具有属性dataSource; ViewController实现contentViewControllerDataSource协议并托管contentViewController想要访问的数据。一类是数据的“客户”;另一个通过您可以从外部修改的委托协议“共享”数据。在您的代码中dataSource,协议和协议都分配给同一个ViewController类,这是没有意义的。所以,你可以尝试修复它:我现在不确定哪个班级应该做什么,但我希望你会知道。

于 2012-10-27T07:27:12.430 回答