2

大量のデータを含むディクショナリオブジェクトを含むインスタンス変数を含むviewcontrollerがあります。ビューはかなり複雑で、個別のビューファイルからインスタンス化して埋め込むいくつかのサブビューが含まれています(実際のビューコントローラーに1000行のUIコードが含まれないようにするため)-しかし、独自のファイルに存在するこれらのサブビューにアクセスするにはどうすればよいですか?ビューコントローラからの私の辞書オブジェクト?したがって、DescriptionView.mファイルを編集する場合-ViewControllerからlocationDataディクショナリオブジェクトのコンテンツにアクセスするにはどうすればよいですか?

私が何を意味するのか理解していただければ幸いです。

ViewControllerのスニペットは次のとおりです。

CaseViewController.h

#import "DescriptionView.h"

@interface CaseViewController : UIViewController {
    NSDictionary *locationData;

    DescriptionView *descriptionView;
}

@property (nonatomic, retain) NSDictionary *locationData;
@property (nonatomic, retain) DescriptionView *descriptionView;

@end

CaseViewController.m

- (void)loadView {
    UIView *view = [[UIView alloc] init];

    descriptionView = [[DescriptionView alloc] initWithFrame:CGRectMake(0, 130, 320, 237)];
    descriptionView.hidden = NO;

    [view addSubview:descriptionView];

    self.view = view;
    [view release];
}
4

2 に答える 2

5

理想的には、ビューから viewcontroller のプロパティにアクセスしないでください。MVC アーキテクチャの主なアイデアは、viewcontroller がビューに何をレンダリングするかを伝え、その逆ではないということです。したがって、初期化中にビューがレンダリングするために必要なすべてのデータを提供する必要があります。

- (void)loadView { 
    UIView *view = [[UIView alloc] init];

    descriptionView = [[DescriptionView alloc] initWithFrame:CGRectMake(0, 130, 320, 237) paramDict: self.locationData]; descriptionView.hidden = NO;

    [view addSubview:descriptionView];

    [descriptionView release]; // BTW add this line here (or in dealloc) or you'll have a leak

    self.view = view; [view release]; 
}

ビューを動的に更新する必要がある場合は、いくつかのメソッドをビューに追加して、viewcolnroller から呼び出す必要があります。例えば:

DescriptionView.m:

-(void) updateWithDict:(NSDictionary*) udict;

DescriptionView のいくつかのボタンが押されたとき (または他のユーザー操作) にいくつかのアクションを実行する必要がある場合は、DescriptionViewDelegate (またはそのようなもの) のようなプロトコルを宣言することをお勧めします。

-(void) descriptionViewButton1Pressed:(DescriptionView*) dview;
-(void) descriptionViewButton2Pressed:(DescriptionView*) dview;

次に、 CaseViewController をデリゲートにして、そこにそのメソッドを実装します。

于 2011-01-25T10:37:32.917 に答える
1

ビューからビューコントローラへの参照を持つ最も簡単な方法は、拡張することUIViewです。

@interface MyView: UIView {
    UIViewController *mViewController;
}

その後、loadView

MyView *view = [[MyView alloc] init];
view.mViewController = self;
于 2011-01-25T10:29:33.130 に答える