ViewController访问数据

时间:2012-10-27 07:20:45

标签: ios xcode

今天我会问你是否有办法调用另一个视图控制器的方法而不是初始化它,或者只是如何将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;

1 个答案:

答案 0 :(得分:1)

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

在这种情况下,我的建议是在您的设计中创建一个“模型”(如在模型 - 视图 - 控制器中),并使您的应用程序中的任何位置都可以访问该模型。完成后一点的简单方法是使模型类成为单例;或者你可以使它成为一个只有类方法的类来提供对数据的访问。有关示例代码的相同问题,另请参阅this other answer of mine

阅读完编辑后,我会建议如下:

  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
  6. 您可以致电:

    NSString* textViewContent = self.dataSource.textViewContent;
    

    或:

    self.dataSource.textViewContent = @"NEWVAL";
    
  7. 希望这有帮助。

    编辑:

    查看文件后:

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

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