2012-10-27 67 views
-1

今天我會問你是否有方法來調用另一個視圖控制器的方法,而不是初始化它,或者只是如何將該viewController作爲一個全局變量在.h文件中聲明。 請幫助我。 我正在使用PageViewController,我必須使用contentViewController alredy初始化的方法。ViewController訪問數據

這裏創建我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文件中propertys:

 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

你的'contentViewController'是什麼? – sergio

回答

1

從你的問題標題,似乎您試圖訪問你的控制器得到一些數據回來。

在這種情況下,我的建議是在您的設計中創建一個「模型」(如在模型視圖控制器中),並使該模型可以在應用程序中的任何位置訪問。完成後一點的簡單方法是使模型類成爲單例;或者你可以使它成爲一個只有類方法才能訪問數據的類。有關示例代碼的相同問題,另請參閱this other answer of mine

閱讀你的編輯後,我建議如下:

  1. 添加到您的contentViewController類的屬性說dataSource;

  2. dataSourcecontentViewControllerDataSource類型的,並且提供了訪問所有必需的數據的方法,例如:將contentViewController到頁面控制器之前

    @protocol contentViewControllerDataSource <NSObject> 
        -(NSString*)textViewContent; 
    @end 
    
  3. ,設置其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類,這是沒有意義的。所以,你可以嘗試修復它:我不知道現在哪個類應該做什麼,但你會知道,我希望。

+0

我的contentViewController有一個textView用於放置字符串。我必須調用這個contentViewController才能獲得修改的字符串... –

+0

你能幫助我嗎? –

+0

我不知道如何使用你以前的帖子... –