2012-10-03 5 views
1
- (void)viewWillDisappear:(BOOL)animated 
{ 
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) { 
     if ([self.navigationController.viewControllers.lastObject isKindOfClass:[CustomViewController class]]) { 
      NSArray *tempArr = self.navigationController.viewControllers; 
      self.navigationController.viewControllers = tempArr; 
      [self.navigationController popViewControllerAnimated:YES]; 
      return; 
     } 
    } 
    [super viewWillDisappear:animated]; 
} 

사용자가 뒤로 버튼을 누르고 이전 UIViewController가 CustomViewController 인 경우 마지막으로 2 개의 UIViewControllers를 팝업하고 다른 하나는 마지막 UIVIewController를 팝합니다. iOS. viewControllers 배열의 버그?

나는 이러한 문자열은 아무 의미 없다고 생각 :

 NSArray *tempArr = self.navigationController.viewControllers; 
     self.navigationController.viewControllers = tempArr; 

그러나 내가 그들을 삭제하면 그때이 지난 UIViewControllers 팝 현재의 UIViewController에서 제목 대신 CustomViewController의 제목을 얻는다.

버그입니까? 그리고이 코드는 iOS 6에서 작동합니까?

+0

omg 질문은 마지막 문구입니다. – Gargo

+0

나는 이것에 동의하지 않습니다. – Fogmeister

답변

1

unwind segues를 사용하면 훨씬 더 좋은 방법이 있습니다.

기본적으로 ViewController에서 마커 점을 설정 한 다음 그 위에 뷰 컨트롤러를 밀어 넣습니다.

그런 다음 언제든지 (사용자가 단추 나 다른 것을 누르면) 마커를 사용하여 viewController로 다시 팝업 할 수 있습니다.

더 이상 볼 컨트롤러를 몇 개 만들지 않아도됩니다 ... 그냥 작동합니다.

이 부분은 StackOverflow answer입니다.

2

popViewController가 팝업되기 전이나 후에 배열을 검사하고 있는지 알지 못하기 때문에 이것이 실제로 작동하는지 잘 모르겠습니다. 아이디어는 viewController를 두 번 터뜨리는 대신 마지막 객체를 제거하는 것입니다.

- (void)viewWillDisappear:(BOOL)animated 
{ 
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) { 
     if ([self.navigationController.viewControllers.lastObject isKindOfClass:[CustomViewController class]]) { 
      NSMutableArray *tempArr = [self.navigationController.viewControllers mutableCopy]; 
      [tempArr removeLastObject]; 
      self.navigationController.viewControllers = tempArr; 
      return; 
     } 
    } 
    [super viewWillDisappear:animated]; 
관련 문제