2012-08-03 7 views
0

사용자 지정 segue를 표준 Push Segue와 비슷한 방식으로 빌드하려고하지만, 제 경우에는 사용자 정의 단추를 사용하여 화면 간을 전환하고 싶습니다 (탭 막대가 응용 프로그램, 모든 모달 segue도 좋지 않다). 기본 화면은 사용자 정의 그래픽이며 다음 화면으로 이동할 화면은지도입니다. 사용자가지도에서 지점을 선택하고 완료되면 다시 좌표와 함께 기본 화면으로 돌아옵니다. ViewController를 맞춤 segue에 연결하려고합니다.뒤로 버튼과 같이 사용자 지정 segue 푸시

나는 인터넷을 통해 많은 솔루션을 연구하고 적합 할 수있는 코드를 찾았지만 코드는 ViewControllers와 AppDelegate에 산재 해 있습니다 (애플이 받아들이는지 확실하지 않습니다). CustomSegue.m/h에 전체 코드를 넣으려고합니다. 두 번째 ViewControler에 기술 (아래)을 사용하기 때문에 성공은 부분적이지만 두 번째 ViewController를 닫고 기본 화면으로 돌아 오는 방법을 알아낼 수 없기 때문에 부분적입니다. 나는 다양한 기법을 시도했지만 컴파일러가 오류를 많이내어 컴파일러를 종료합니다. 빌드 및 실행 전에 오류 또는 경고가 없습니다. 나는 또한 [self dismissModalViewControllerAnimated : YES]를 사용하여 버튼을 눌러 닫으려고했다. 또는 [self dismissViewControllerAnimated : 예 완료 : 없음]; 그들은 modal segues를 시도 할 때 작동하지만 잘못된 결과를 내 코드와 함께 사용합니다.

누구나 이것을하는 깔끔한 방법에 대한 제안이 있습니까? 나는 지난 며칠 동안이 문제에 관해서 쌓아두고있다. 많은 앱에서 이런 종류의 전환이 일어나는 것을 보았습니다. 그래서 꽤 인기 있고 쉬운 해결책 인 것 같습니다. 나는 Xcode만의 경험이별로 없다. 이것은 내 사용자 정의 segue (QuartzCore 애니메이션 포함)입니다.

#import "CustomTabBarSegue.h" 

@implementation CustomTabBarSegue 


-(void)perform { 
    UIViewController *src = (UIViewController*)[self sourceViewController]; 
    UIViewController *dst = (UIViewController*)[self destinationViewController]; 

    UIView *currentView = src.view; 
    UIView *theWindow = [currentView superview]; 
    UIView *newView = dst.view; 
    [theWindow addSubview:newView]; 

    CATransition *transition = [CATransition animation]; 

    transition.delegate = self; 
    transition.duration = 1; 

    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionMoveIn; 
    transition.subtype = kCATransitionFromRight; 


    [[theWindow layer] addAnimation:transition forKey:@"MySegue"]; 
} 

@end 

다음은 destinationVC의 내 버튼 코드입니다.

- (IBAction)dismiss:(id)sender 

{

[self dismissViewControllerAnimated:YES completion:^() { 
    [self performSegueWithIdentifier:@"MySegue" sender:self]; 
}]; 

}

답변

8

나는 당신이 뭘 하려는지 이해할 수있다 생각 (작동하지 않습니다). 비록 내가 틀렸다면 나를 바로 잡아라. 하나의보기로 이동 한 다음 뒤로 버튼을 눌러서 다시 돌아가고 싶습니다. 옳은? 이야기 게시판으로 이것을하는 것은 쉽습니다. NavigationController를 초기보기로 설정하고 기본 메뉴에 탐색 컨트롤러의 루트보기 컨트롤러를 설정합니다. 거기서부터 PUSH segue를하고 싶고 돌아가려면 POP을하고 싶습니다.

푸시 세구를 호출하는 것은 보통 세그를 호출하는 방법이지만 팝은 조금 다릅니다. 하나의보기를 다시 표시하는 코드는 [self.navigationController popViewControllerAnimated:YES];입니다. 루트보기 컨트롤러로 다시 팝하는 코드는 [self.navigationController popToRootViewControllerAnimated:YES];입니다.

나는 이것이 당신이 원하는 것이라고 생각합니다. 커스텀 섹슈 (Custom Segues) 필요 없음.

+0

죄송합니다. 영어로 저의 제 2 언어입니다.이 초반에 저는 제 IOS 모험의 초보 단계입니다. 귀하의 대답에 대한 내 질문은 : 푸시가 최고 바없이 구축 할 수 있는지에 대한 이야기입니다. 상단 바는 전체 효과를 파괴합니다. 준비된 예제에 대한 코드 나 링크를 게시 할 수 있습니까? 나는 고맙게 여기 라. 고맙습니다. –

+0

스토리 보드에 추가 한 탐색 컨트롤러를 클릭하고 설정으로 이동하면 상단 표시 줄을 선택 취소 할 수 있습니다. –

+0

정말 훌륭합니다. 정말 고맙습니다. 때때로 가장 어려운 것은 가장 간단한 솔루션 인 것처럼 보입니다. –

관련 문제