-1

今日は、別のView Controllerのメソッドを初期化せずに呼び出す方法があるかどうか、またはそのviewControllerを.hファイルで宣言されたグローバル変数として取得する方法があるかどうかを尋ねます。お願い助けて。PageViewControllerを使用しており、すでに初期化されているcontentViewControllerのメソッドを使用する必要があります。

ここで、ViewControllerを作成します。

- (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プロパティがあります。プロトコルを実装し、アクセスしたいデータをホストします。1 つのクラスはデータの「クライアント」です。もう一方は、外部から変更できるデリゲート プロトコルを介してデータを「共有」します。あなたのコードでは、と プロトコルの両方が同じクラスに割り当てられていますが、これは意味がありません。だから、あなたはそれを修正することができます: どのクラスが何をすべきか今はわかりませんが、あなたは知っていると思います.dataSourceViewControllercontentViewControllerDataSourcecontentViewControllerdataSourceViewController

于 2012-10-27T07:27:12.430 に答える