2012-06-09 2 views
0

두 개의 뷰 A와 B가있는 TabBar 메시징 응용 프로그램이 있습니다. 뷰 A에서 뷰 B에 대리자 메서드가있는 대리자 형식의 개체가 선언되었습니다. 보기 A에서 무언가가 발생하면 대리자 개체의 메서드가 호출되어 B보기의 대리자 메서드가 실행되도록 트리거합니다. 이 "무언가"가 발생할 때마다 내가 원하는 것은보기 A가 보이면 탭 표시 줄에서보기 B로 전환하기를 원합니다.보기 B가 표시되면보기에는 아무런 변화가 없습니다. 어떻게해야합니까?iOS :보기에서 모달 델리게이트 메서드 호출

TabBar 및 모든 관련보기가 appdelegate에서로드 된 다른보기 컨트롤러에 있기 때문에 실제 앱은 위에서 설명한 것보다 복잡합니다. (나는.이 응용 프로그램과 무한한 지혜의 원래 개발자에 대한 기여는 일이 정말 애매하기로 결정입니다) 그리고 난의 라인을 따라 뭔가를 사용하는 솔루션을 구현하지 않으려는

[self.tabBarController setSelectedIndex:1] 

... 그것은 그것이 어떻게 일어나길 바라지 않기 때문입니다. 나는 A 뷰의 델리게이트가 호출 될 때마다 B 뷰를 볼 수 있도록하고 싶다. 감사.

내 게시물을 편집했습니다.이 줄 [self.tabBarController setSelectedIndex : 1]과 위와 아래의 절은 한 줄을 구성합니다. 나는 강조하기 위해 줄임표를 넣었습니다.

+0

> "어떻게 그런 일이 일어나기를 원하지 않습니다." 자, ** ** "비밀"입니다. – Mundi

+0

@Mundi Lol, 편집 됨! –

+0

편집 중에이 한 줄의 코드 만 있고 "위와 아래의 절"이 없습니다. 죄송합니다. – Mundi

답변

0

당신은 단지 당신이 -isDesendentOfView: 방법을 사용할 수 있습니다 볼 수있는 뷰를 확인하려면 다음을 통해 질문을 읽고시 :

if([viewA isDescendentOfView:someView]) { 
     //viewA is visible as a subview to `someView` 
} 

편집을. 대리자 방법이 정의 된 경우

: 나는 당신이 from..i, 전자의 출처를 확인하기 위해 위임 방법에 sender 매개 변수를 보낼 생각 대리자에서

-(void)someMethod:(id)sender; 

당신 같은 것을 할 것입니다 :

-(void)someMethod:(id)sender { 

    UIView *aView = (UIView*)sender; 

     if(aView == viewA) { 

     } 

     if(aView == viewB) { 

     } 
} 

희망이 도움이, 또는 적어도 그것을 알아내는 경로에의 당신을 넣어!

+0

실제로보기 B는이 특정보기에서 실행되는 대리자 메서드가보기 A 인 위임 개체가있는보기에 의해 트리거 되었기 때문에 호출의 출처를 확인할 필요가 없습니다. 두 번째 제안은 의미가 있습니다. 보기 B가 표시되는지 여부를 확인하는 데 사용할 것입니다. 숨겨진보기 (예 :보기 B)에 자체를 보이게하는 방법이 있습니까? 이러한 뷰는 이미 메모리에로드되어 있으며 뷰 B의 메소드는 뷰 B를 볼 수 있도록해야합니다. –

+0

보기의'setHidden :'메소드와'isHidden' 속성이 있습니다. '[viewB setHidden : YES]'를 사용한다고 가정하면'[viewB isHidden]'을 할 수 있으며'TRUE'를 리턴합니다. – skram

+0

제안한대로 setHidden 및 isHidden을 시도했지만 내보기가 하얗고 비어있게되었습니다. 나는 '[self.navigationController pushViewController : self.contactsViewController animated : YES]'를 사용하여 새로운 뷰를 제자리에 밀어 넣었다. 이 솔루션은보기의 완전히 새로운 인스턴스를 생성하므로 완벽하지는 않습니다 (메모리 문제도 원하지 않습니다.)하지만 작업이 완료됩니다. 아직 대안이 없다. 나는 당신의 도움을 위해 당신의 제안 (매우 도움이된다, btw)을 줄 것입니다. –