2014-04-30 37 views
2

是否可以檢測是否一個UIViewController是一個容器視圖內,相比於例如被模態顯示,作爲一個UINavigationViewController內等?確定是否UIViewController的是集裝箱內部查看

編輯:澄清這一問題的原因是:我有,有時顯示爲一個表格表,其他時間作爲一個孩子VC另一個VC內部(在容器視圖)一個VC。我希望能夠檢查VC如何實際顯示(表單表單或Container視圖中)。

+0

要小心,這裏作爲一個簡單的UIViewController座標UIViews。它在技術上不顯示任何內容,並且不包含在UIView中。你能更具體地解釋你想解決的問題嗎? – dboals

+0

摘要中回答這個問題有點難。在什麼情況下你不知道它是否在容器視圖中(畢竟你大概創建了故事板,並且會知道)?你能更具體地說明你爲什麼需要這些信息嗎? – rdelmar

+0

你的編輯本質上是一樣的。您所指的「容器」視圖實際上並不存在。它只能在故事板中繪製,以幫助設計。所發生的只是「包含」視圖控制器的「視圖」被添加爲屬於「父」視圖控制器的「視圖」的子視圖。你可以在代碼中完成......'[self.view addSubview:someViewController.view];'這就是發生的一切。 – Fogmeister

回答

0

我寫了一個小片段,顯示視圖的所有子視圖,所以如果你傳遞一個頂層視圖,你可以看到你的整個子視圖樹。傳入@「」縮進以使子樹縮進一點,然後將其從調試器控制檯複製並粘貼到像Bbedit這樣的文本編輯器中。

- (void) viewAllSubviews:(UIView *) topView Indent:(NSString *) indent { 
for (UIView * theView in [topView subviews]){ 
    NSLog(@"%@%@", indent, theView); 
    if ([theView subviews] != nil) 
     [self viewAllSubviews:theView Indent: [NSString stringWithFormat:@"%@ ",indent]]; 
} 

}

您可以使用這樣的事情來檢查你的容器視圖。

3
parentViewController property is set only if you are inside a container view. 

見 - > https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/parentViewController

編輯:

爲檢查類型做這樣的事。

UIViewController * parentController = self.parentViewController; 
if (parentController != nil && [parentController isKindOfClass:[UINavigationController class]]) 
{ 
    // code 
} 
+0

你不需要'parentController!= nil'條件。 – Droppy

+2

這並不簡單。如果控制器嵌入在任何類型的容器控制器中,那麼parentViewController屬性將爲非零,其中包括Apple的所有罐裝控制器,如UINavigationController,UITabBarController和UISplitViewController。我不確定OP是否要求區分這些和自定義容器視圖?如果是這樣,你將不得不看看parentViewController是否爲非零,而不是任何這些Apple類。 – rdelmar

+0

@redelmar,是的,出於某種原因,我的眼睛只能看到這個單詞模態的問題,但是他需要檢查所有的蘋果罐頭類型,或者如果他知道可能的customViewController類型,他也可以簡單地與這些類型進行比較。取決於他在做什麼。 – dboals

0

UIViewController有一個屬性navigationController和一個屬性tabBarController。見UIVIewController reference

if(self.navigationController) { 
    //you are inside a navigation controller 
} 
0

Swift3,使用

if let parentVC = self.parent{ //no embeded 
    if parentVC is UINavigationController //no embedded{ 
     ... 
    } else {//embeded 
     ... 
    } 
} else {//presented 
    ... 
} 

表達示出了從導航欄當前視圖控制器;否則 嵌入由父視圖控制器(例如,視圖控制器與一個視圖與一個的UITableViewController嵌入)。

如果self.parent ==爲零,它被提交。希望有所幫助。

相關問題