Trong bối cảnh của ARC, đây là một giải pháp khả thi:
NSMutableArray* navArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
[navArray replaceObjectAtIndex:[navArray count]-1 withObject:nextViewController];
[self.navigationController setViewControllers:navArray animated:YES];
Như bạn có thể nói, mã này thay cho mã đẩy thông thường trong giao diện bạn đang cố gắng để loại bỏ từ ngăn xếp ("B" trong câu hỏi của bạn). Dòng 1 sao chép danh sách các bộ điều khiển chế độ xem từ ngăn điều hướng nav vào một số NSMutableArray
. Dòng 2 thay thế chế độ xem cuối cùng (trên cùng) bằng chế độ xem mà chúng tôi muốn chuyển sang tiếp theo ("C"). Dòng 3 làm cho ngăn xếp của bộ điều hướng thực tế trở thành mảng được thay đổi của chúng ta và làm cho quá trình chuyển đổi trở thành mục trên cùng. (Tất nhiên bạn không thể sử dụng mã này trong viewController root.)
Tôi tìm thấy một cách khác here và áp dụng nó cho ARC:
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:someViewController animated:YES];
Dòng đầu tiên là cần thiết bởi vì một khi bạn đã popped chế độ xem hiện tại tắt ngăn xếp, self.navigationController
sẽ là nil
và dòng thứ ba sẽ không hoạt động. Cùng một số dòng như cách trước đó, nhưng cách này hoạt động thông qua các phương thức dựng sẵn thay vì "không hợp lệ" bằng cách sử dụng chồng.
Bất kỳ ý tưởng làm thế nào để làm điều này với ARC kích hoạt? Trình biên dịch không cho phép sử dụng 'retain' – asdasd
@Oscar, xem giải pháp của tôi, [dưới đây] (http://stackoverflow.com/a/17328244/1431728). – JohnK