2015-10-29 19 views
11

Tôi có một điều hướng xem 3 bộ điều khiển trong đó A trình bày bộ điều khiển phương thức B, trình bày bộ điều khiển phương thức C tất cả thông qua phân đoạn. C có một thư giãn segue trở lại B. Nó cũng có một thư giãn trở lại A. Khi tôi thực hiện hành động cho C để thư giãn để B, nó bung ra nhưng sau đó bật B và quay trở lại A. Đây không phải là những gì tôi muốn, tôi muốn nó trong trường hợp này để ở lại B. Dưới đây là những segues VC C sử dụng.Unwind Segue iOS quay lại 1 quá nhiều VC

unwind segues from VC C

unwindCancel là khi người dùng nhấp vào một collectionViewCell và đi lại cho VC B. prepareForUnwind chỉ là một tiêu chuẩn "hủy bỏ" nút để VC A.

Dưới đây là mã cho didSelectItem gọi các thư giãn trong VC C. Dưới đây là prepareForSegue trong VC C.

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ 
[self performSegueWithIdentifier:@"unwindCancel" sender:self]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if ([segue.identifier isEqualToString:@"unwindCancel"]) { 
     GalleryDetailViewController *detailVC = segue.destinationViewController; 
     detailVC.colletionCount = self.indexPathToPass; 
    } 
} 

VC B thư giãn trong file .m

-(IBAction)unwindCancel:(UIStoryboardSegue *)segue{ 

    [self.collectionView scrollToItemAtIndexPath:self.colletionCount atScrollPosition:UICollectionViewScrollPositionLeft animated:YES]; 
} 

VC Một thư giãn trong file .m

-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue { 
} 

Trả lời

3

Khi đi từ C đến B, không sử dụng một segue Thư giãn chỉ có C gọi dismissViewController. Nếu bạn cam kết sử dụng các khoảng cách thư giãn, hãy xem here phần cụ thể cho phép Phân đoạn theo hướng gió xác định Bộ điều khiển chế độ xem điểm đến của nó

2

Tôi đoán bạn đã nhầm lẫn số nhận dạng của thư giãn với phương thức Hành động của thư giãn.

Nếu bạn xây dựng một thư giãn-segue với hành động "PrepareForUnwind", và sau đó bạn thay đổi định danh của thư giãn-segue này thành "relaxCancel" .Vấn đề sẽ xuất hiện.

Chỉ cần đảm bảo số nhận dạng của thư giãn-segue khớp với phương thức hành động của nó.

+1

Có 2 khoảng cách thư giãn từ C - một quay trở lại B và quay lại A. – noobsmcgoobs

+1

@noobsmcgoobs Tôi đã tạo lại bản trình diễn của bạn, sự cố không tồn tại. Do đó, tôi đoán bạn đặt tên cho segue sai.Đặt "nslog "trong hai phương pháp thư giãn của bạn, và xem cái nào được gọi. – wj2061

+0

@noobsmcgoobs Bài đăng này tương tự như: http: //stackoverflow.com/q/33181577/4975761 – wj2061

Các vấn đề liên quan