8

iPad ダッシュボードのように 2 つの単純なコンテナーを並べたビュー レイアウトを実装しようとしています。

私は数多くの例を読んできました。もちろん、ビュー コントローラの Apple View Controller リファレンスも読んでいますが、一般的には最も奇妙な問題があり、簡単な説明があることを願っています。

2 つのビュー コンテナーを並べて追加しました。それぞれに、異なる背景色、1 つの Round Rect Button、およびラベルを持つビュー コントローラーが格納されます。また、テスト目的で、「mainViewController」に Round Rect ボタンも追加しました。

とても簡単でシンプルです。各ビューはコンテナー ビューに読み込まれますが、それらのいずれとも対話できません (ボタンをクリックしても何も起こらず、青いハイライトも表示されないため、委任やボタンからのアクションが受信されるかどうかの問題ではありません。そのようなものは実装されていません)。ただし、2 つのコンテナーを保持している「mainViewController」に配置したボタンをクリックすると、問題なく動作します (いつものように青く点滅します)。もう1つの奇妙なことは、コンテナビューにも背景色が表示されないことです?! ボタンとラベルのみ。

次のようにプログラムします。

ファイル: ViewController.h および .m (「mainViewController」) sidebarViewController.h および .m (これらのファイルでは何も変更されていません。UIViewController) resultsViewController.h および .m (これらのファイルでは何も変更されていません。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も持っていて、最初にaddChildViewControllerステートメントも持っていました)

わかりましたので、私の疑いはもちろん、ビュー階層と関係があり、ビューは rootViewController ビューの「背後」にあるため、クリックできないように表示されているだけです。これを機能させるには、Appデリゲートで何をする必要がありますか? または、このコードで何か間違ったことをしましたか?

編集:何が間違っているのか別の手がかりを見つけました:ストーリーボードの「自動レイアウト」を無効にすると、ビューが表示されて機能しました(!)が完全に歪んでいましたが、少なくとも正しい背景色が得られ、ボタンが機能しています. 自動レイアウトを無効にせずにこれを修正する方法を知っている人はいますか? 私はすべてのレイアウトをプログラムで行う必要があると思いますか?:(

どうもありがとう、

4

1 に答える 1

2

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

于 2012-11-18T18:20:12.427 に答える