2012-01-22 1 views
0

内部に2つのビューコントローラを持つUIPopoverControllerがあります。私はそうのようにそれを構築している:私は最初のポップオーバーをロードするときに、addCommentsViewControllerがcommentsViewControllerによって隠されているUIPopoverController内部の2つのコントローラ:フレームに問題があります

commentsViewController = [[CommentsViewController alloc] init]; 
commentsViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 

addCommentsViewController = [[AddCommentViewController alloc] init]; 
addCommentsViewController.view.frame = CGRectMake(0, commentsViewController.view.bounds.size.height - 200, 320, 346); 
addCommentsViewController.view.backgroundColor = [UIColor darkGrayColor]; 

[self.view addSubview:addCommentsViewController.view]; 
[self.view addSubview:commentsViewController.view]; 

:私のcommentsPopoverControllerインサイド

CommentsPopoverController *commentsPopoverController = [[CommentsPopoverController alloc] init]; 
self.delegate = commentsPopoverController; 
commentsPopoverController.navigationItem.title = @"Comments"; 
UINavigationController *navController = [[UINavigationController alloc]        initWithRootViewController:commentsPopoverController]; 
popover = [[UIPopoverController alloc] initWithContentViewController:navController]; 

が、私はこれを持っています。私はそれを公開すると、それは次のようになります。

popover with both controllers visible

をこれまでのところは良いです。私が抱えている問題は、ここから、ユーザーがデバイスを回転させたり、キーボードを表示したり、キーボードを表示したりすると、デバイスが回転して、うまくいかなくなってしまうことです。 UITableViewであるトップビューコントローラ(commentsViewController)は、向きが何であっても、キーボードが表示されているかどうかにかかわらず常に正しいことを行います。しかし、ボトムビューコントローラ(addCommentsViewController)はorigin.yを自動的に変更してトップビューコントローラの直下にとどまることはありません。

私は基本的に、トップビューコントローラの高さを常に計算して、下のビューコントローラのorigin.yを調整できるように、commentsViewControllerの直下にaddCommentsViewControllerを保持するコードをハックする必要がありました。これは、キーボードの表示/非表示状態とデバイスの向きと常に再計算のNSNotificationsを削除することを伴います。非常にハッキーで醜い。

私の質問(最終的に)は次のとおりです。これらのビューを制御する簡単な方法はありますか、それとも私がやり方でハックしたのですか?

答えて

0

回転を処理するには、2つの適切な手法があります。 1つは、CommentsPopoverControllerUIViewのサブクラスで、layoutSubviewsをオーバーライドして2つのビューを正しくレイアウトすることです。もう1つは、viewDidLayoutSubviewsCommentsPopoverControllerに定義してビューをレイアウトすることです。これらの方法のいずれかでビューをレイアウトする場合、回転通知を購読する必要はありません。

キーボードの下からビューを移動する方法については、Text, Web, and Editing Programming Guide for iOSで説明しています。この技術の一部には、キーボードを購読することで通知を表示/非表示にすることが含まれます。

UITableViewControllerは、キーボードが隠されているか表示されているときにテーブルビューを調整するので、CommentsViewControllerUITableViewControllerのサブクラスだとします。

+0

私は今、viewDidLayoutSubviewsを調べて、それが何であるかを見ていきます。キーボードの表示/非表示については、現在NSNotificationsに既に登録しています。 viewDidLayoutSubviewsやlayoutSubviewsのテクニックを動作させることができたら、私は戻って答えを受け入れます。時間をいただきありがとうございます! –

+0

私はviewDidLayoutSubviewsを不正行為を起こしたビューに追加してしまい、その中でアップデートを行いました。それはトリックを行ったようです。素晴らしい答えをありがとうございます。 –

関連する問題