2011-08-17 58 views
1

我有以下問題: 當我試圖通過在我的masterView中選擇一個表中的項來替換我的UISplitViewController的detailView時, masterView的navigationbarbutton消失。如果iPad處於橫向模式,則更換將無任何錯誤跡象。當我先將iPad旋轉到橫向模式然後再回到縱向模式時,按鈕會回來。所以我想我已經爲uisplitviewcontroller設置了正確的委託。是否有可能告訴uisplitviewcontroller要問委託不當時旋轉設備還是我忘了什麼東西更新按鈕時,我更換了的DetailView - 這裏是爲masterViewControllerUISplitviewController - 在運行時從MasterView替換DetailView,而不會丟失portraitmode中的按鈕

MyViewController *myvc = [[MyViewController alloc] initWithNibName:nil bundle:nil]; 
[self.subservientController setViewControllers:[NSArray arrayWithObject:myvc] animated:NO]; 
self.splitViewController.delegate = myvc; 
內更換代碼

主控subservientController是導航控制器的參考,其中detailViewController(MyViewController)將被推送

回答

1

這是一個非常古老的問題,並且關於相同類型的事物還有很多其他問題,所以我很驚訝地看到這個一個沒有答案。不知道你還需要一個答案,但對於在搜索中發現這個問題的任何人,我希望這有助於。

讓我困惑的事情是,當你說「masterView的導航欄按鈕消失」時,它確實只是看起來像這樣。真正發生的是,它甚至從來沒有存在過,在你的全新觀點中,你只需要用代替舊的觀點。你甚至在提問中提到了這個問題,你把換成了的詳細視圖。當我查看從最初創建我的應用程序的Master-Detail應用程序模板生成的文件時,這讓我頭暈目眩,它將UISplitViewConrollerDelegate分配給詳細視圖。

所以,當你或我更換有一個新的視圖詳細視圖,我們也只是消滅了UISplitViewConrollerDelegate所以我必須確保新的詳細視圖充當UISplitViewConrollerDelegate,創造等問題進行跟蹤保存在iVar中的popoverButtonItem。

UISplitViewController Class Reference它說:

有根據 應用程序的類型可以採取兩種主要方法,是創建:

一個簡單的主從接口,其詳細視圖仍然是 不變。在此配置中,單個視圖控制器在應用程序的生命週期內管理 詳細視圖,並更新子視圖的 內容以反映主視圖中的選擇。主視圖控制器具有對詳細視圖控制器 的引用,並且每當選擇的項目 改變或發生某些其他相關事件時通知詳細視圖控制器。詳細視圖 控制器也可能用作分割視圖控制器的代表。

一個複雜的應用程序,其中主視圖和詳細視圖(和相應的視圖控制器)可能會更改。在複雜配置中,您需要一個單獨的自定義控制器對象來管理主控和詳細視圖控制器,並在它們之間進行調解。定製 控制器通常是拆分視圖控制器的代表,並且是 負責與當前詳細視圖控制器 進行通信以顯示和隱藏彈出欄按鈕項目。

這裏的第二個是你所擁有的,而事實上蘋果提供了一個名爲MultipleDetailViews一個示例應用程序,演示如何正確地做到這一點,這涉及將委託詳細信息視圖控制器之外,並具有各自的細節視圖控制器符合協議,至少有兩種方法來添加主按鈕,另一種方法是從導航欄中刪除主按鈕(假設您在詳細視圖中有導航欄)。

請注意,必須始終在詳細信息視圖中顯示和隱藏「masterView的navigationbarbutton」(如果您有多個視圖,則它們中的每一個),因爲主視圖是將要有時隱藏。這是另一件令我困惑的事情,因爲我一直認爲它屬於主視圖控制器。

我猜你可能已經完成了所有這些工作,但它有助於解釋你的問題的實際答案。


你的新的細節視圖控制器必須檢查,看看是否被顯示在UISplitView在縱向方向呈現,如果是這樣,目前的按鈕。


只需在 - (void)viewWillAppear:(BOOL)動畫方法中執行此操作,並在需要時顯示它。這也意味着您必須跟蹤上次隱藏的按鈕或構建新按鈕。

希望有幫助,如果有人讀到這個發現我的邏輯錯誤,請糾正我。每當我在我的應用程序中找不到那個按鈕時,這仍然讓我感到非常困惑。

相關問題