2013-03-07 6 views
5

내가 내 응용 프로그램에서 이상한 버그 건너 온 트리거 :.jQuery과 푸시 SEGUE 여러 번

셋업

간단한 마스터 - 세부 응용 프로그램, 아이폰 스타일 (즉, 어떤 분할보기, 아니 팝 오버, 단지 네비게이션 컨트롤러, 테이블 뷰 컨트롤러 및 뷰 컨트롤러).

enter image description here

버그

  1. 터치 섹션 머리글 또는 바닥 글과 같은 테이블 뷰 (내 스크린 샷에 어두운 회색 부분)의 "배경"부분.
  2. 손가락을 화면에 대고 셀을 여러 번 터치합니다.
  3. 모든 손가락을 뗍니다. 은 "상세"보기 의지는 일반적으로 밀려하지만, 다시 버튼을 터치 할 때, 당신은 당신이 단계에서 세포를 감동으로 상세 뷰가 여러 번 적층 된 것을 발견 할 것이다 2.

enter image description here

당신이 할 수있는 또한 2 단계에서 여러 셀을 터치하여 목적지보기는 올바른 순서 :

내가 깨끗하고 신선하게 만든 응용 프로그램과 함께 버그를 재현 할 수 있었다 그것을

를 재현 적층하고, t에있을 것입니다 그는 iPhone 용 트위터 앱을 마지막으로 릴리스했습니다 (손가락 1로 '로드 중'라벨을 터치하고 트윗을 여러 번 터치 함).

그러나 설정 응용 프로그램의 "일반"탭 (그룹화 된 테이블보기)에서 동일한 동작을 트리거 할 수 없습니다.

버그는 iOS 6.0 및 6.1에서 재현되었습니다. 테스트 할 이전 버전의 장치가 없습니다.

질문 네비게이션/표보기 기반 응용 프로그램을 만들 때

이 알려진 트릭 그렇다면이 (이상한) 동작을 방지하는 솔루션이있다? 아니면 iOS 버그입니까? 그렇다면 Apple에서 이미 알고 있습니까? 당신이 사용할 수

+0

응용 프로그램에서이 버그를 재현 할 수 없습니다. 셀을 선택하자마자 Segue가 푸시됩니다. 내가하는 것처럼 여러 셀을 선택할 수 없습니다. 따라서 응용 프로그램 (또는 다른 응용 프로그램)과 관련이있을 수 있습니다.) segue push를 처리하십시오. 한 가지 질문 : 왜 테이블과 다음 viewController 사이에 스토리 보드에 세 개의 세그먼트가 있습니까? 하나는 충분해야합니다. – Vinzzz

+0

이것은 여러 셀에서 segue를 테스트하는 것입니다. 테이블보기 정적 셀을 포함하고 각 셀에 대한 segue 만들었습니다. 내 "진짜"응용 프로그램은 그러나 단 하나의 segue (ctrl + 다음 컨트롤러로 드래그, 꽤 고전)로 만든 동적 셀을 사용합니다. 방금 iOS 6.x에서 테스트 한 질문에 추가했습니다. 이전 버전을 테스트 중입니까? –

+0

그리고이 세그를 '커스텀'으로 설정하고 프로그램 적으로 일을하는 경우에도이 버그가 있습니다 : 테이블 위임자의'didSelectCellAtIndexPath :'에서'performSegueWithIdentifier'를 호출합니까? 이것은 내가 처리하는 방법입니다. 여러 셀 (iOS 6)을 선택할 수 없습니다. – Vinzzz

답변

0

이는 OS의 이전 버전의 아이폰 OS 7

애플에 의해 고정되어, Dan F's answer 트릭을 할해야합니다.

3

가능한 정지 갭 측정

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

을 구현 그리고 현재 그 SEGUE을 실행하려고하는 것을 나타내는 부울 플래그 또는 무언가를 사용하는 것입니다. 예 :

BOOL doingSegue = NO; 

-(void) viewWillAppear 
{ 

    doingSegue = NO; 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
{ 

    if ([identifier isEqualToString:@"MySegueIdentifier"]) 
    { 
     if (doingSegue) 
     { 
      return NO; 
     } 
     else 
     { 
      doingSegue = YES; 
      return YES; 
     } 
    } 
    return YES; 
} 

스위프트 버전

var doingSegue = false 

override func viewWillAppear(_ animated: Bool) { 
    doingSegue = false 
} 

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 
    if identifier == "MySegueIdentifier" { 
     if doingSegue { 
      return false 
     } 
     else { 
      doingSegue = true 
      return true 
     } 
    } 
    return true 
}