2014-04-30 2 views
2

UIViewController가 모달로 표시되는 것과 비교하여 컨테이너보기 안에 있는지, 예를 들어 UINavigationViewController 안에있는 것과 비교하여 감지 할 수 있습니까?UIViewController가 컨테이너보기 내에 있는지 확인하십시오.

편집 :이 질문에 대한 이유를 명확히하기 : 때때로 VC (Container View)의 다른 VC 안에 자식 VC로 다른 시간에 양식 시트로 표시되는 VC가 있습니다. VC가 실제로 어떻게 표시되는지 (Form Sheet 또는 Container View) 확인할 수 있기를 원합니다.

+0

여기 UIViewController는 UIView를 단순히 조정하므로주의하십시오. 기술적으로 아무것도 표시하지 않으며 실제로 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]]; 
} 

}.

유형을 확인하는대로

이 같은 작업을 수행합니다> https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/parentViewController

편집 -을

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

을 참조하십시오.

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

'parentController! = nil' 조건은 필요 없습니다. – Droppy

+2

이렇게 간단하지는 않습니다.컨트롤러가 UINavigationController, UITabBarController 및 UISplitViewController와 같은 Apple의 모든 준비된 컨테이너 컨트롤러를 포함하는 모든 유형의 컨테이너 컨트롤러에 포함되어있는 경우 parentViewController 속성은 0이 아닌 값이됩니다. OP가 사용자 정의 컨테이너보기와 구별 할 것인지 묻는다면 잘 모르겠습니다. 그렇다면 parentViewController가 nil이 아니고 Apple 클래스가 아닌지 확인해야합니다. – rdelmar

+0

@redelmar, 예, 몇 가지 이유로 내 눈은 단어에 대해 모달로만 질문을 보았습니다. 그렇지만 모든 통조림 Apple 유형을 확인해야하거나 가능한 customViewController 유형을 알고 있다면 간단하게 비교할 수 있습니다. 그가 이것으로 무엇을하고 있는지에 달렸습니다. – dboals

0

UIViewController에는 navigationController 속성과 tabBarController 속성이 있습니다.

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

탐색 줄에서 현재 뷰 컨트롤러를 나타내는 표현 사용 Swift3에서 UIVIewController reference

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

참조; 그렇지 않으면 상위 뷰 컨트롤러 (예 : 하나의 UITableViewController가 포함 된 뷰가있는 ViewController)에 의해 포함 된 .

if self.parent == nil, 제시됩니다. 희망이 도움이됩니다.

관련 문제