确定UIViewController是否在Container View中

时间:2014-04-30 19:17:49

标签: ios uicontainerview

是否可以检测UIViewController是否在容器视图中,与例如以模态方式显示,是否在UINavigationViewController内等等?

编辑:澄清这个问题的原因:我有一个有时显示为表单的VC,有时作为另一个VC中的子VC(在容器视图中)。我希望能够检查VC的实际显示方式(表单或容器视图)。

4 个答案:

答案 0 :(得分:4)

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
}

答案 1 :(得分: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]];
}

}

您可以使用类似的内容来检查容器视图。

答案 2 :(得分:0)

UIViewController有一个属性navigationController和一个属性tabBarController。见UIVIewController reference

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

答案 3 :(得分:0)

在Swift3中,使用

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

表示从导航栏显示当前视图控制器;除此以外 由父视图控制器嵌入(例如,ViewController,其中一个视图嵌入了一个UITableViewController)。

如果self.parent == nil,则会显示。希望有所帮助。