5

何か基本的なことが欠けていると思うので、コミュニティに助けを求めたいと思います。基本的な iPhone ユーティリティ アプリケーションに基づいてアプリを構築しています。私の MainView と FlipsideView はいくつかの要素を共有しているので、それらの部分に対して個別の ViewControllers と nib ファイルを作成しました。これを行うために、私は次のことを行いました: 1. searchDateView.xib のファイルの所有者である searchDateViewController と呼ばれるビューコントローラーを作成しましたMainViewController.m と FlipsideViewController.m の両方に、次のようにサブビューを追加します。

- (void)loadView{
    [super loadView];
    searchDateViewController = [[SearchDateViewController alloc] initWithNibName:@"SearchDateView" bundle:nil];
    [[searchDateViewController view] setFrame:[searchDateView frame]];
    [[self view] addSubview:[searchDateViewController view]];

...
}

すべてが正常に表示され、機能します。基本的に、メイン ビューとフリップサイド ビューのそれぞれで発生するアクションに応じて、ペン先の UILabel が変更されます。ただし、searchDateViewController が MainView または FlipsideView から読み込まれる場合は、少し異なることをしたいと考えていました。ただし、どのViewControllerがsearchDateViewControllerサブビューを追加しているのかわかりません。

searchDateViewController で試しました:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"superview %@", self.view.superview);
    NSLog(@"parentviewcontroller %@", self.parentViewController);
}

どちらの場合も、ゼロになります。

だから私の質問は - どのViewControllerがsearchDateViewController aaサブビューを追加しているかを見つけることができますか? もしそうなら、どのように?または、ここでの私のロジックが完全に台無しになっている場合、どうすればよいでしょうか?

ありがとう!

4

2 に答える 2

2

viewDidLoadビューコントローラがビューをロードしたときに呼び出されます。あなたの場合、それはこの行で起こります:

[[searchDateViewController view] setFrame:[searchDateView frame]];

その時点ではまだ電話をかけていないaddSubview:ので、ビューのスーパービューがゼロであることは不思議ではありません。

問題を解決するには、SearchDateViewController内にプロパティを定義して、さまざまなケースを区別する必要があります。このプロパティは、SearchDateViewControllerインスタンスを作成する親コントローラーによって適宜設定されます。

一般に、UIViewControllerサブクラスを、フルスクリーンビュー自体として使用するのではなく、1つまたは複数のフルスクリーンビューのサブビューとして使用するビューのコントローラーとして使用することはお勧めできません。UIViewControllerのロジックの多くは、フルスクリーンビューの管理に使用されることを前提として機能します。たとえば、デザインでは、デバイスの向きが変わったときなどにSearchDateViewControllerがビューのフレームを変更する可能性があると思います。フルスクリーン以外のサブビューではこの機能をすべて必要としないため、SearchDateViewControllerをNSObjectから直接サブクラス化することをお勧めします。 。

于 2010-01-14T14:23:09.030 に答える
-2

ViewController とビューは完全に分離されています。

ほとんどの場合、サブビューを親ビューに追加するとき、そのコントローラーを親の viewController に追加しません。このルールの例外は、ビュー コントローラーの階層を維持するためにビューの代わりにコントローラーを追加するナビゲーション コントローラーです。

SearchDate親コントローラーを割り当てたことがなく、システムが自動的にそれを行わないため、viewController は親コントローラーを見つけることができません。別のコントローラーからビューを呼び出すときに、親コントローラーを割り当てることができます。

searchDateViewController.parentController=self;
于 2010-01-14T14:19:48.103 に答える