2010-02-22 61 views
3

根據蘋果有關UISplitViewController的文檔(在新的iPad 3.2 SDK中),它看起來像他們打算讓您只將它用作應用程序的根控制器。換句話說......它接縫就像你不能將UISplitViewController放到UINavigationController上,因爲顯然UINavigationController需要保持分割視圖。UISplitViewController是否必須是iPad應用程序的根控制器?

任何人都可以確認這是否是UISplitViewController的真正限制嗎?我希望能夠在我的應用程序中使用我的應用程序中的分割視圖,在我的UINavigationController層次結構中深入幾層,但看起來我不能這樣做,除非有辦法。

謝謝!

回答

5

當我嘗試以模態方式呈現UISplitViewController時,我的應用程序崩潰。

+0

您將得到一個未捕獲的異常:「應用程序嘗試以模態方式呈現分割視圖控制器」[原文] – 2010-04-17 16:32:02

1

蘋果HIG說你不能。意味着他們可能阻止了你這樣做,所以我懷疑你會得到它的工作。一些開發者已經自己編寫了

1

完全沒有。例如,可以在層次結構的根部有一個標籤欄控制器,其中每個標籤都有一個分割視圖控制器。

見我對改造拆分視圖控制器標籤欄接口柱:http://markivsblog.blogspot.com/2010/04/retrofitting-ipad-uisplitviewcontroller.html

+0

您可以在技術上做到這一點,但會遇到錯誤 - 主要是當用戶更改其他選項卡上的應用程序方向並返回拆分視圖選項卡。 – Jason 2010-06-30 13:41:00

2

這是一個老帖子,但我發現它有用的幫我想以不同的方式,這是我如何解決問題。

我以編程方式創建了我的splitViewController。然後我用一個數字標記它,並將其作爲子視圖添加到當前視圖中。


FirstViewController* firstView = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];  
SecondViewController* secondView = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];   
UISplitViewController* splitVC = [[UISplitViewController alloc] init]; 
[splitVC setDelegate:secondView];  
splitVC.viewControllers = [NSArray arrayWithObjects:firstView, secondView, nil];  
splitVC.view.tag = 99;  
[self.view addSubview:splitVC.view]; 

之後,顯示splitView,但要擺脫它,我必須從視圖中刪除它,所以我創建了viewcontrollers之間的通知。在主視圖控制器中,我添加了觀察者。 (注:主視圖控制器不是splitViewController或它的景色之一,它是加載splitViewController視圖控制器)中選擇「removeSplitView」我把我所有的當前視圖的子視圖的

NSNotificationCenter *splitViewObserver = [NSNotificationCenter defaultCenter]; 
[splitViewObserver addObserver:self selector:@selector(removeSplitView) name:@"removeSplitView" object:nil]; 

通過for循環並使用標籤99搜索UIView類對象並將其從超級視圖中移除。

NSArray *subviews = [self.view subviews]; 

for (int i = 0; i < [subviews count]; i++) { 
    if ([[subviews objectAtIndex:i] isKindOfClass:[UIView class]]) { 
     UIView *tempView = [subviews objectAtIndex:i]; 
     if (tempView.tag == 99) { 
      [[subviews objectAtIndex:i] removeFromSuperview]; 
     } 
    } 
} 

在的firstView我稱做了方法的帖子,主要是ViewController觀察通知。

-(IBAction) done:(id)sender {  
    [fileSelectedNotification postNotificationName:@"removeSplitView" object:self];  
} 

您還必須在應用程序的某處創建fileSelectedNotification。我通過viewDidLoad做到了這一點。它看起來像這樣。

fileSelectedNotification = [NSNotificationCenter defaultCenter]; 

當然我也添加了這個

NSNotiicationCenter *filesSelectedNotification; 

這個viewController的.h文件。

因此,當我按下完成按鈕(這是我的應用程序欄按鈕)時,它將從視圖中刪除splitViewController

工作正常。我從閱讀文檔中獲得了所有這些。

0

僅供參考,我認爲這是要走的路:看到類似question

相關問題