是否可以检测UIViewController是否在容器视图中,与例如以模态方式显示,是否在UINavigationViewController内等等?
编辑:澄清这个问题的原因:我有一个有时显示为表单的VC,有时作为另一个VC中的子VC(在容器视图中)。我希望能够检查VC的实际显示方式(表单或容器视图)。
答案 0 :(得分:4)
parentViewController property is set only if you are inside a container view.
编辑:
检查类型是否做这样的事情。
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,则会显示。希望有所帮助。