2011-11-29 3 views
1

페이지 컬이있는 모달보기를 사용하여 사용자 이름을 입력 할 수있는보기가 있습니다. 이 사용자 이름은 웹 기반 서비스로 검증되어 유효한지 확인합니다.모달보기를 닫지 않도록 할 수 있습니까?

잘못된 사용자 이름을 입력하고 모달보기 외부를 클릭 할 때까지 모든 것이 잘 작동합니다. 사용자 이름은 여전히 ​​유효하지 않은 것으로보고되고 유효하지 않은 것으로보고 UIAlertView이 열립니다. 그러나 부모보기로 돌아갑니다.

이 경우 모달을 해제하지 못하게 할 방법이 있습니까?

보기를 다시로드하려고 시도했지만 작동하지 않거나 UIAlertView이 차단하고 있습니다. 내가 가진 마지막 아이디어는 잘못된 사용자 이름에 대한 경고에서 모달보기를 "확인"과 함께 표시하는 것입니다. 누구든지 아이디어가 있습니까?

+0

모달보기 위의 경고 표시에는 문제가 없어야합니다. 보기 외부의 탭에서 모달보기가 해제 된 이유는 무엇입니까? – Ariel

+0

클릭이 모달을 닫는 부모보기의 모달 외부에 있습니다. 해고는 UIAlert를 표시하는 사용자 이름 검사를 트리거합니다. 무효의 사용자 명을 입력하지 않으면 모든 것이 효과적이며, 모달이 닫히고 경고가 표시되지만 다시 모달보기로 리디렉션하려고합니다. 이것은 단순해야만하는 것처럼 보이지만 많은 시간을 보냈으며 단지 저를 위해 일하지 않습니다. – Mike

답변

1

당신은 UINavigationController 당신은 모달 뷰 호출 뷰 컨트롤러에 이런 식으로 뭔가를 넣을 수있는 사용되지 않은 경우 :

-(void)dismissModalViewControllerAnimated:(BOOL)animated{ 
    if (_someFlagForBeingProperlyLoggedIn) [super dismissModalViewControllerAnimated:animated]; 
} 

당신이 제시/부모 뷰 컨트롤러 컬 페이지에 탭

dismissModalViewControllerAnimated:를 전송됩니다 .

내비게이션 컨트롤러를 사용하고 있으므로 옵션이 제한됩니다. 이는 UINavigationControllerUIViewController의 하위 클래스이고 그 중 하나가 자체 중앙에 위치하기 때문입니다. 당신이 페이지 컬을 클릭하면 dismissModalViewControllerAnimated :가 호출됩니다.

여전히 서브 클래스를 사용하여 위의 방법을 구현할 수 있지만 서둘러 지저분 할 수 있습니다.

UIAlertView가 "직접 돌아 가기"를 모달 로그인보기로 갖는 것은 매우 쉽습니다. 기본보기가 UIAlertViewDelegate 프로토콜을 준수하는지 확인하십시오. 당신은 표시 할 때 경고가 대리인으로 해당 인스턴스를 설정하고, 그 클래스에 메소드 구현 : 경고보기를 해제 할 때

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ 
    // Enclose in if (buttonIndex == #) for selective calling 
    UINavigationController* nav = (UINavigationController*)[[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"Preferences"]; 
    [nav setModalTransitionStyle:UIModalTransitionStylePartialCurl]; 
    [self.navigationController presentModalViewController:nav animated:YES]; 
} 

이 그 다음은 '로그인'보기를 표시됩니다.

+0

간단한 NSLog를 사용하여이 함수를 호출 해 보았습니다. 그러나 모달 뷰가 닫힌 경우에도 히트하지 않았습니다. 나는 깃발을 세우는 당신의 생각을 좋아합니다. 그런 다음 모달보기를 닫으면 부모의 viewDidAppear에서 해당 플래그를 확인할 수 있습니다. 아직 그 함수가 호출되지 않는 이유는 확실하지 않습니다. 아이디어를 가져 주셔서 감사합니다. – Mike

+0

의 curl을 클릭하면 login view controller라고 부르 자. login view controller가 아닌 present/parent view controller에서'dismissModalViewControllerAnimated :'를 호출한다. – NJones

+0

수정하십시오.나는 그것을 제시 컨트롤러에 추가하고 NSLog (@ "Dismissing Modal"); 디버거에 나타나지 않습니다. 다음은 모달을 호출하는 코드입니다. UINavigationController * nav = (UINavigationController *) [[UIStoryboard storyboardWithName : @ "MainStoryboard_iPhone"번들 : nil] instantiateViewControllerWithIdentifier : @ "환경 설정"]; [nav setModalTransitionStyle : UIModalTransitionStylePartialCurl]; [self.navigationController presentModalViewController : nav animated : YES]; – Mike

0

약간의 지연 (약 0.3-0.5)으로 모달보기를 다시 표시해야합니다. 그것이 기각되어야한다는 것을 알리는 데 필요한 시간이며 모달 뷰가 나타나지 않게하는 것은 정확히 애니메이션 (경고보기 해제)입니다.

-(void)showModal{ 
    SomeModalViewClass* modalView = [[SomaModalViewClass alloc]init]; 
    [self setModalTransitionStyle:UIModalTransitionStylePartialCurl]; 
    [self presentModalViewController:modalView animated:YES]; 
    [modalView release]; 
} 

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ 
    //check the button index if needed and then 
    [self performSelector:@selector(showModal) withObject:nil afterDelay:0.3]; 
}