2012-01-16 12 views
1

私はIOS rpgを開発中です。このゲームはタブバーによって制御され、タブバーのすべてのビューコントローラーには、画面の上部にある共通の「ヘッダー」があり、プレイヤーに関する情報が表示されます。一度にnibsから複数のビューを持つViewController

しかし、残りの画面にはさまざまなビューが表示されます。各ビューコントローラは、「ヘッダ」ビューの下に複数の異なる「ビュー」を表示する役割を担います。さらに、これらのビューの多くは画面の境界に収まらないため、スクロール可能である必要があります。

質問:あなたは、単一のビューコントローラに別々のニブから2つのビューを追加するにはどうすればよい

1)。

2)どのようにこれらのビューの1つだけをスクロールビューに埋め込みますか?

ありがとうございます。

答えて

1

NSBundleloadNibNamed:owner:options:機能でペン先をロードできます。戻り値は、ペン先のすべてのオブジェクトの配列です(インターフェイスビルダでペン先を作成すると、左側に表示されるリスト)。表示されている場合は、ペン先のオブジェクトのリストの最初の項目、その配列の0番目のインデックスにあるオブジェクトです。

NSArray *objects1 = [[NSBundle mainBundle] loadNibNamed:@"View1Nib" owner:self options:nil]; 
UIView *customView1 = [objects1 objectAtIndex:0]; 

NSArray *objects2 = [[NSBundle mainBundle] loadNibNamed:@"View2Nib" owner:self options:nil]; 
UIView *customView2 = [objects2 objectAtIndex:0]; 

UIScrollView *scroll = [[[UIScrollView alloc] init] autorelease]; 
[scroll addSubview:customView2]; 

[[self view] addSubview:customView1]; 
[[self view] addSubview:scroll]; 
+0

なぜこれが下降したのですか? – ColdLogic

+0

これはうまくいきました。 –

0

ビューコントローラを作成すると、自動的にxibを生成するように選択すると、ビューコンセントがデフォルトでビューに接続されます。次に、別の名前の新しいxibを作成し、そのファイル所有者をView Controllerクラスとして作成します。また、ビューアウトレットを手動で接続します。あなたの代わりに「yourNibName」の名を置き、ロードしたいものは何でもXIBに応じ

YourViewController *x = [[YourViewController alloc] initWithNibName: @"yourNibName" bundle:nil]; 

: は今、initメソッドを呼び出します。希望が役立ちます。

+0

注ペン先、ビューではない。 – ColdLogic

0
  1. あなたは、両方のビューへの参照を持っている必要があります、あなたは単に[view addSubview:secondView];通常通りにすることができます。ビューコントローラーに関連付けられていないxibのビューへの参照を取得する方法はいくつかありますが、そのビューがアプリ内の他の場所で既にインスタンス化されているかどうかによって異なります。私はあなたがすでに他の場所でそのビューをインスタンス化していると思います。単に追加したいだけです。それは私だったら、私はそのビューの親のためにシングルトンを使用するので、私のような何かを行うことができます:

    [view addSubview:[ParentClass parentClassSharedInstance] viewToAdd]];

  2. スクロールビューは、あなたが完全に理解するために作業する必要があります獣ですが、あなたをほかのビューと同じようにビューを追加します。重要なのは、フレームのサイズよりも大きい可能性があるcontentSizeプロパティがあることです。私は通常、ScrollViewの下のすべてのビューを管理したいサイズの単一のビューを使用します。がんばろう!

1

私は復元識別子を使用することなく、配列の順序に依存し、以下を実行ニブに複数のビューがある場合:これはからビューコントローラをロードすること

UINib *nib = [UINib nibWithNibName:@"Nib" bundle:nil]; 
NSArray* views = [nib instantiateWithOwner:self options:nil]; 
assert(views.count == 3); 
UIView *aView; 
UIView *anotherView; 
UIView *yetAnotherView; 
for (UIView* view in views) { 
    if ([view.restorationIdentifier isEqualToString:@"AViewId"]) { 
     aView = (SettingsCell *) view; 
    } 
    else if([view.restorationIdentifier isEqualToString:@"AnotherViewId"]) { 
     anotherView = (SettingsCell *) view; 
    } 
    else if([view.restorationIdentifier isEqualToString:@"YetAnotherViewId"]) { 
     yetAnotherView = (HeaderView *)view; 
    } 
} 
assert(aView && anotherView && yetAnotherView); 
関連する問題