2012-11-18 3 views
8

私は、iPadダッシュボードの方法で2つの単純なコンテナを並べて表示レイアウトを実装しようとしていました。ストーリーボード、インタラクション、ビューの問題を使用したコンテナビュー

私は数多くの例を通して、もちろんView ControllerのためのApple View Controllerのリファレンスを読んできましたが、私は、うまくいけば簡単な説明がある最も奇妙な問題があります。

2つのビューコンテナを並べて追加しました。それぞれのコンテナには、背景色が異なるビューコントローラー、1つの丸い四角形ボタン、ラベルが格納されています。また、テスト目的のために、 "mainViewController"にRound Rectボタンを追加しました。

かなり正直で単純です。各ビューはコンテナビューに読み込まれますが、私はそれらのいずれかと対話できません(ボタンがクリックされたとき、何も起こらず、青色の強調表示がないので、委任の問題ではないか、そのようなものは実装されていません)。しかし、私は2つのコンテナを保持する "mainViewController"に入れたボタンをクリックすると、完璧に動作します(いつものように青い点滅)。別の奇妙なことは、背景色がコンテナビューにも表示されないことです。ボタンとラベルのみ。

プログラムは次のように:

ファイル: ViewController.hと.Mを sidebarViewController.hとの.m(これらのファイルに変更なし、のUIViewController) resultsViewController.hと.M( "mainViewController" です) (これらのファイルに変更なし、のUIViewController) AppDelegate.hとの.m(変更なし) ストーリーボード

ViewController.h、コンセントに作成され、ストーリーボード内の各コンテナビューに接続されています。

#import <UIKit/UIKit.h> 
#import "sidebarViewController.h" 
#import "resultsViewController.h" 

@interface ViewController : UIViewController 

@property (nonatomic, weak) IBOutlet UIView *sidebarView; 
@property (nonatomic, weak) IBOutlet UIView *resultsView; 


@end 

ストーリーボードの識別子は、ストーリーボードのsidebarViewcontrollerとResultsviewcontrollerの両方に設定されています。

ViewController.m、すべてが本によってなさ(またはおそらくないが、何少なくともそれは私にように思える)

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize sidebarView,resultsView; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

UIStoryboard *storyboard = self.storyboard; 
sidebarViewController *sideVC = [storyboard instantiateViewControllerWithIdentifier:@"SidebarViewController"]; 
resultsViewController *resultsVC = [storyboard instantiateViewControllerWithIdentifier:@"ResultsViewController"]; 

//sidebarViewController *sideVC = [[sidebarViewController alloc]init]; 
//rresultsViewController *resultsVC = [[resultsViewController alloc]init]; 
[self addChildViewController:sideVC]; 
sideVC.view.frame = self.sidebarView.frame; 
[self.sidebarView addSubview:sideVC.view]; 
self.sidebarView.userInteractionEnabled = YES; 
[sideVC didMoveToParentViewController:self]; 

[self addChildViewController:resultsVC]; 
resultsVC.view.frame = self.resultsView.frame; 
[self.resultsView addSubview:resultsVC.view]; 
self.resultsView.userInteractionEnabled = YES; 
[resultsVC didMoveToParentViewController:self]; 

} 

(私もself.xxxxViewを持っていた、ともありました

私の疑惑はもちろん、ビュー階層とは関係があり、ビューはrootViewControllerビューの背後にあり、そのためクリック可能ではないことが示されています。これを動作させるには、App Delegateで何が必要なのでしょうか?または、私はこのコードで何か間違ったことをしましたか?

編集:別の手がかりを見つけたのは間違っているかもしれません:ストーリーボードの「自動レイアウト」を無効にしたときにビューが表示され、完全に歪んだのですが、ボタンが機能しています。自動レイアウトを無効にせずにこれを修正する方法は誰にでも分かりますか?私は私のレイアウトを計画的にすべてやり直さなければならないと思いますから? :(

多くのおかげで、

答えて

2

あなたが持っているすべてのことのコードが不要であり、あなたの問題を引き起こしているものと考えられます。あなたはIBであなたのコンテナビューを追加すると、それは自動的にそれらの埋め込みビューコントローラを作成します(とコンテナビューのサイズになるようにサイズを変更します)あなたはそれらを取得しましたか?クラスをサブクラス化されたView Controllerのクラスに変更するだけです。「メイン」ビューコントローラからこれらのコントローラにアクセスする必要がある場合は、childViewControllersプロパティからそれらのコントローラへの参照を取得できます。

+0

すぐにお返事ありがとうございます。はい、私はそれらを取得し、それらはもちろんボックスの外で働いている、問題は私はprogramally(新しい子コントローラを持つ他のコントローラ)にこれらのビューを切り替えるしたいと思います。私はまだ組み込みコントローラの子ではない場合、要求に応じて異なるコントローラを組み込むことができるように、「組み込みシーケンス」を変更する方法を見ていませんか? –

+0

@AndreasKlintberg、sideBarViewControllerとresultsViewControllerはIBで自動的に取得した2つのコントローラーか、切り替えようとしている2つのコントローラーですか? – rdelmar

+0

埋め込みセグを使用したくないので、これらは新しく作成したものではありません(これらはプログラムで扱うことができないか、少なくとも私はそのリファレンスをまだ見つけていません) –

関連する問題