2

我有UISplitViewControllerUITabBarController作爲它的主人。 UITabBarController包含一個UINavigationControllerUITableViewController作爲它的根(它是我的應用的主菜單)。UITpBarController在UISplitViewController與故事板

主菜單攻上的任何細胞,在UISplitViewController的細節部分的另一UITableViewController應提交後(我們稱之爲詳細視圖)。

storyboardscheme

在橫向模式下一切正常確定。

但在肖像,激起我對電池接頭在主菜單,則詳細視圖提出模態,而不是推,喜歡它應該。另外,從橫向到縱向轉動時,在主菜單呈現,而不是詳細視圖,之後我點擊主菜單的位置,以顯示詳細視圖,它有模式有沒有可能呈現旋轉或返回。

刪除UITabBarController和設置UINavigationControllerUISplitViewController的大師的作品,因爲我想(在橫向模式下,我們有菜單 | 詳細意見並排而在縱向模式控制器表現得像他們在常規UINavigationController)。但是,然後UITabBarController消失了。

我已經試過:

  • 每一個可能的賽格瑞型 - 他們沒有工作我想
  • 子類UIStoryboardSegue取決於UISplitViewControllerviewControllers參數去實現自定義行爲的方式(在畫像模式它只有一個視圖控制器 - 主) - 但我無法識別類(謝謝斯威夫特!)

我想要的是完全在Storyboard中完成(好的,自定義segues不算) - 我想要一個優雅的解決方案,我拒絕相信這是不可能的。

在iOS 8 SDK工作時,Xcode 6.2,iPhone 6加

回答

4

不幸的是沒有絕對優雅解決這一個(據我已經成功地完成)。希望蘋果最終將整理出來,但在此期間,這是最好的辦法可能

  • 將一個自定義賽格瑞代替顯示詳細信息
  • 在您的自定義的perform方法SEGUE有類似:
- (void)perform 
{ 
    MasterViewController *source = self.sourceViewController; 

    AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; 
    UISplitViewController *splitViewController = appDelegate.splitViewController; 
    if ([splitViewController.viewControllers count] > 1) { 
     [source performSegueWithIdentifier:@"showDetail" sender:source]; 
     if (appDelegate.masterPopoverController) { 
      [appDelegate.masterPopoverController dismissPopoverAnimated:YES]; 
     } 
    } else { 
     [source performSegueWithIdentifier:@"showDetailSmallDevice" sender:source]; 
    } 
} 
  • [splitViewController.viewControllers count]是這裏只是分離設備(ipad公司& iPhone 6加號)和其他那些
  • 在你的故事板,線一個名爲showDetail一個賽格瑞這實際上是一個showDetail,以細節導航控制器,並直接向內容瀏覽控制器另一個showDetailSmallDevice這實際上是顯示 (推送)

見例如:

http://i.stack.imgur.com/GQpg3.png

0

編輯:SplitViewController需要兩個導航控制器。解決方案是您需要在SplitViewControllerDatailViewController之間插入另一個導航控制器。然後,從TableView,將Segue直接預製到第二個導航控制器。 SplitViewControllers想要兩個導航控制器...

也許一個好方法可能是在IB上啓動一個新的SplitViewController項目。有各種缺省方法和屬性來管理SplitViewController。你可以在appDelegate類中找到一些東西,這可能是一個很好的起點。

OLD:我喜歡Mateusz的回答,只是一個可以使用self.splitViewController.isCollapsed進行測試的點,如果DetailViewController是或者它可以顯示在屏幕上。有了這個屬性,就沒有必要對viewControllers進行計數。

@property(nonatomic, readonly, getter=isCollapsed) BOOL collapsed 

來自文檔:一個布爾值,指示是否只顯示一個子視圖控制器。當拆分視圖控制器內容語義分解爲單個容器時,此屬性設置爲YES。拆分視圖控制器從水平常規環境轉換爲水平緊湊環境時發生摺疊。在它被摺疊之後,分割視圖控制器報告它的viewControllers屬性中只有一個子視圖控制器。

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – Brody 2015-10-16 03:27:49

+0

@Brody你是對的!解決方案是他需要在SplitViewController和DatailViewController之間插入另一個導航控制器。從TableView中,直接將塞格變形爲第二個導航控制器。SplitViewControllers需要兩個導航控制器... – Zanzi 2015-10-16 05:07:32

+0

如果是關於代碼,並且編碼人員與編碼人員交談,那麼直接使用代碼通常會更容易,然後以自然語言風格編寫代碼。同樣,儘可能簡短準確地回答你的問題,否則你會浪費人們的閱讀時間。刪除無用信息(例如,非答案部分),或刪除完整的答案,如果它沒有增加對問題有價值的內容。 – hoijui 2015-10-20 08:05:04