2012-08-12 2 views
0

셀을 선택하면 RootViewController1 또는 RootViewController2에서 스토리 보드 부분으로 푸시/입력되는 DetailViewController가 있습니다.DetailViewController를 푸시 한 ViewController를 지정합니다.

DetailViewController에는 IBAction의 버튼이 있습니다.

부모 ViewController가 RootViewController2 인 경우 반환 할 수 있습니다. 그렇지 않으면 행동을 취하십시오. 이 같은 뭔가 :

-(IBAction)actionButtonPressed:(id)sender 
{ 
    if (parentViewController == RootViewController2) { 
     return; 
    } 

    //Else this is done: 
    textLabel.text = @"Test"; 
} 

하지만 그것이 작동되도록하는 방법을 잘 모르겠어요,이 예는 좋은 것입니다. 더 많은 정보가 필요하면 알려주세요.

편집 :

#import "RootViewController2.h" 

... 

-(IBAction)actionButtonPressed:(id)sender 
{ 
    if([self.parentViewController isKindOfClass:[RootViewController2 class]]) { 
     return; 
    } 

    //Else this is done: 
    textLabel.text = @"Test"; 
} 

을하지만 행동은 여전히 ​​두보기에서 수행됩니다

코드는 이제 다음과 같습니다. 추가 제안 사항?

답변

1

@Matt에서 언급 한 것처럼 뷰 컨트롤러는 배열로 저장됩니다. 이 같은 탐색 컨트롤러 배열에 액세스 할 수 있습니다

[self.navigationController.viewControllers lastobject ] 
[self.navigationController.viewControllers objectAtIndex:2]; 

You can also get a reference to the parent view controller like this: 
self.parentViewController 
self.presentingViewController 

관계없이 부모에 대한 참조를 얻는 방법, 당신은 여전히 ​​참조를 비교하는 방법이 필요합니다. if ([object isKindOfClass : MyClass class])와 같은 인트로 스펙 션을 사용할 수 있습니다. 하지만 어떻게 든 그 접근 (보기 컨트롤러 배열을 사용하여) 각 부모 개체에 대한 개체 참조가 필요합니다. 그것의 까다로운 길.

또 다른 쉬운 방법은 - (void) prepareForSegue .... block에서 segue하기 전에 뷰 컨트롤러에 속성 값을 설정하는 것입니다. 이런 식으로 뭔가 :

MyClass *myClass = segue.destinationViewController; 
myClass.myLogicProperty = @"mommy"; 

다른 뷰 컨트롤러

MyClass *myClass = segue.destinationViewController; 
myClass.myLogicProperty = @"daddy"; 

지금에서 다른 SEGUE, 당신의 버튼을 누르면 때, 올바른 일을 단지 그 가치에 대하여 다음을 위해 할 수있는

.

특정 요구 사항을 모르는 경우에는 후자를 권장하고 viewcontrollers 배열을 사용하지 않도록 권고하십시오.

희망이 도움이됩니다.

1

UINavigationController에 푸시 된 뷰 컨트롤러는 스택 (선형 순서)을 형성합니다. 이 스택을 UINavigationController'sviewControllers 배열로 가져올 수 있습니다. (UINavigationController 자체를 밀어 넣기보기 컨트롤러의 navigationController이라고 부를 수 있습니다.이 세부 컨트롤러가 스택 맨 끝 (스택 끝)에 있기 때문에, 알고 싶은 것은 이전 것입니다. 배열의 마지막 항목까지.

+0

내가 그것을 네, 다,하지만이 라인 할 노력하고있어처럼 나는, 이전의 ViewController의 이름이 "ViewController2"인지 확인하는 방법을 코드 예제를 필요로 할 수 있습니다 알고있는 경우 (parentViewController == RootViewController2) { – ingenspor

+0

isKindOfClass :'당신이 찾고있는 방법이어야합니다. – mAu

+0

새 질문으로 내 질문이 업데이트되었습니다. – ingenspor

0
#import "RootViewController2.h" 

... 

-(IBAction)actionButtonPressed:(id)sender 
{ 
#define CurrentParentViewController [[self.navigationController viewControllers] objectAtIndex:[[self.navigationController viewControllers] count] - 2] 
if([CurrentParentViewController isKindOfClass:[RootViewController2 class]]) { 
    return; 
} 

//Else this is done: 
textLabel.text = @"Test"; 
} 
관련 문제