2012-01-22 52 views
0

我有一個UIPopoverController,裏面有兩個視圖控制器。我建立它像這樣:UIPopoverController內部的兩個控制器:有框架問題

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

裏面我commentsPopoverController我有這樣的:

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]; 

所以,當我第一次加載酥料餅,該addCommentsViewController由commentsViewController隱藏。當我透露它,它看起來像這樣:

popover with both controllers visible

到目前爲止好。我遇到的問題是,從這裏,當用戶旋轉設備或顯示鍵盤或顯示鍵盤,然後旋轉設備的東西開始出現重擊。無論方向是什麼或者鍵盤是否顯示,作爲UITableView的頂部視圖控制器(commentsViewController)都會正確執行。但是底部視圖控制器(addCommentsViewController)不會自動將其origin.y更改爲直接位於頂部視圖控制器之下。

所以,我基本沒破解的廢話了我的代碼到commentsViewController下,通過不斷地計算頂視圖控制器的高度直接保持addCommentsViewController,這樣我可以調整底部視圖控制器的origin.y。這涉及在NSNotifications中放棄鍵盤的顯示/隱藏狀態以及設備的方向並不斷重新計算。非常黑客和醜陋。

所以我的問題(最終)是:有控制這些觀點的一個更簡單的方法還是我卡住盜號的我做的方式?

回答

0

要處理旋轉,有兩種適當的技術。一個是你讓CommentsPopoverController的視圖成爲UIView的一個子類,它覆蓋了layoutSubviews來正確地佈置你的兩個視圖。另一個是你在CommentsPopoverController上定義viewDidLayoutSubviews來佈置你的觀點。如果您使用這兩種方法中的任何一種來佈置視圖,則不必訂閱輪播通知。

至於從鍵盤下方進行移動你的觀點,認爲在Text, Web, and Editing Programming Guide for iOS討論。部分技術涉及訂閱鍵盤將顯示/確實隱藏通知。

我假設你的CommentsViewControllerUITableViewController的子類,因爲UITableViewController負責在隱藏或顯示鍵盤時調整表視圖。

+0

我現在要查看viewDidLayoutSubviews,看看它是什麼。至於鍵盤顯示/隱藏,我目前已經訂閱了NSNotifications。如果我能得到viewDidLayoutSubviews或layoutSubviews技術,我會回來接受你的答案。感謝您抽出寶貴的時間! –

+0

我最終將viewDidLayoutSubviews添加到視圖,這是行爲不端,並在那裏做了更新,它似乎已經做了伎倆,很好的答案謝謝。 –