2010-11-15 295 views
0

我有一個UISplitViewController,我想更改根視圖控制器(在屏幕的左側),當我點擊詳細視圖中的按鈕(右側屏幕一側)。從詳細視圖中設置根視圖控制器在UISplitViewController

如果我這樣做的詳細視圖:

NextGameViewController *newTableViewController = [[NextGameViewController alloc] init]; 
NSArray *newVCs = [NSArray arrayWithObjects:newTableViewController, self, nil]; 
splitViewController.viewControllers = newVCs; 

它崩潰,出現錯誤:

-[NextGameViewController setParentViewController:]: unrecognized selector sent to instance 0x4938a50 

NextGameViewController是的UITableViewController的子類,那麼,爲什麼會出現這種情況?如果我從根視圖將它推到視圖控制器堆棧上,它工作正常。

回答

0

UITableViewController的parentViewController是一個只讀屬性。有關更多討論,請參見this SO question。這聽起來像你想要在詳細信息視圖的左側推送一個新的表視圖,但仍然在根視圖下,而不是替換你的根視圖控制器本身,這就是你所描述的。

您可以使用您試圖替換的數組來獲取此信息。有關viewControllers屬性的更多信息,請參見this link

此外,您的應用程序委託應該可以訪問您的根和詳細視圖。您可以獲取應用程序委託並使用delegate.root屬性將其推送到控制器堆棧上,如前所述。事情是這樣的:

MyAppDelegate* del = (MyAppDelegate*)[[UIApplication sharedApplication] delegate]; 
// do what you want with del.root controller here 
+0

我想完全換一個新的根視圖控制器。我不想將它推入堆棧並導航。 – Senior 2010-11-16 03:16:44

+0

如果我理解你正在做的是正確的,你試圖替換UISplitViewController的一半,而不是它在根中顯示的表。而不是替換那裏爲什麼不隱藏表格並在其中添加視圖?這將使得回到桌子更容易,並且可能會在縱向模式下使用UISplitViewController的旋轉功能。您可以訪問表格,但不能訪問根視圖的所有功能,而不僅僅是一個表格。即使你這樣做,我不認爲它會做你所期望的。 – slycrel 2010-11-16 05:48:04

+0

不是,我想更改表格,但不是將其推入導航堆棧。我有效地想改變它的根源。爲什麼我必須換出視圖而不是視圖的控制器? – Senior 2010-11-16 14:04:42

相關問題