2012-12-09 2 views
1

그래서 iPhone 앱이 있습니다. 그것은 구조가 간단하며 모두 UINavigationController을 기반으로합니다.iPhone 스토리 보드, 프로그래밍 방식으로 호출 세그먼트, 내비게이션

하나의보기가있는 스토리 보드, 다른보기에 대한 세그 등이 있습니다.이 다른보기에는이 화면에서 편집하고 싶지 않은 UITextView이 있습니다. 사용자가이 탭을 사용하면 대신 기본적으로 동일한 텍스트보기를 가진 두 번째 화면으로 이동하지만이 화면은 전체 화면이며 사용자는 이전 화면으로 돌아 가기 전에 해당 화면의 텍스트를 편집합니다.

그래서 textViewShouldBeginEditing 방법을 캡처합니다. 나는 이전에, 스토리 보드 편집기에서 수동으로이 새로운 뷰 컨트롤러로 이전보기 컨트롤러에서 푸시 SEGUE을 생성하고, 정체성의 의해 내가 함께 할 수있는 호출 할 수 있도록 이름 :

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
    // This is called when the user clicks into the textView as if to edit it. 

    // Instead of editing it, go to this other view here: 
    [self performSegueWithIdentifier:@"editMemoSegue" sender:self]; 

    // Return NO, as I don't actually want to edit the text on this screen: 
    return NO; 
} 

이 보인다 합리적. 그리고 그것은 작동합니다. 정렬. 그것은 사실 저를 다른 관점으로 쏘고 있습니다. 다른 뷰의 이벤트가 시작되면서 텍스트 뷰를 첫 번째 응답자로 설정하고 해당 스크린의 텍스트를 편집합니다. 모두 행복합니다.

이전보기로 돌아가려면 뒤로 버튼을 사용하고 싶습니다.

그런 다음 빠르게 찾아냅니다. 내 탐색 스택이 겹쳐져 있습니다. 대부분의 경우, 몇 가지 이유에서 두 개의 새로운 편집 컨트롤러가 스택에 두 번 있기 때문에 처음으로 뒤로 버튼을 누르면 다시 같은 것을 얻게됩니다. 이상하게, 때로는 의도 한대로 작동 할 것이고, 이전 컨트롤러를 한 번만 클릭하면 볼 수 있습니다.

나는 로그를 읽기 시작하고, 나는이 발견
2012-12-09 09:41:03.463 APP[8368:c07] nested push animation can result in corrupted navigation bar 
2012-12-09 09:41:03.818 APP[8368:c07] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 
2012-12-09 09:41:03.819 APP[8368:c07] Unbalanced calls to begin/end appearance transitions for <SecondController: 0x83881d0>. 

그래서 분명히 내가 잘못 여기서 뭔가를하고 있어요합니다. 문제는 무엇입니까? 그리고 어떻게하면 아이폰 프레임 워크의 티키 신을 올바르게 달랠 수 있는지 내가 원하는대로 할 수 있을까?

+0

"내포 된 푸시 애니메이션"오류 메시지는 일반적으로 동일한 컨트롤러에 여러 번 푸시 할 때 발생합니다. 위의 코드는 그 부분을 수행하는 유일한 장소입니까? 스토리 보드에 위에서 언급 한 컨트롤러 2 개와 탐색 컨트롤러가 있습니까? – rdelmar

+0

그 코드가 segue가 호출되는 유일한 장소입니다. 이 컨트롤러는 nav 스택의 두 번째 컨트롤러입니다 (A> B> C, B> C에서 발생). – mschultz

+0

뭔가 어딘가에 잘못 설정해야합니다. 게시 한 코드가 잘 작동합니다. 어딘가에 프로젝트를 게시 할 수 있다면 프로젝트를 보지 않고 말할 것도별로 없습니다. – rdelmar

답변

2

textViewShouldBeginEditing이 두 번 호출되는지 확인하십시오. 나는 이런 종류의 델리게이트 호출이 때때로 있음을 알아 차렸다.

+0

그리고 그것은 !!! textViewShouldBeginEditing이 두 번 호출됩니다! 나는 왜 세계에 실마리가 없지만, 그렇다고 확신합니다. 메소드가 이미 호출되었는지 여부를 판별하는 간단한 플래그 변수가이 문제를 방지하고 모든 것이 참처럼 작동합니다. 저는 이것을 답으로 받아 들일 수는 없지만 이것을 답으로 게시해야합니다. 확실히 그렇게 할 것입니다. 이것이 문제의 해결책이기 때문입니다. – mschultz

0

@ "editMemoSegue"가 스토리 보드에 어떻게 생성됩니까? textView에서 만들어 졌나요? 그런 다음보기 컨트롤러에서 직접 또는보기 컨트롤러의 맨 위 상태 표시 줄에서 다시 만들어야합니다. 즉, 트리거 개체를 터치 할 때와 프로그래밍 방식으로 호출 할 때 두 번 호출되지 않습니다.

+0

방금 ​​확인했습니다 - 첫 번째보기 컨트롤러에서 실제로 생성 된 segue는 두 번째보기 컨트롤러에서 직접 가리 킵니다. 나는 이것이 이것을위한 올바른 패턴이라고 기대 했는가? – mschultz

관련 문제