2011-12-05 23 views
13

Tôi đang viết một ứng dụng iPhone dựa trên bảng phân cảnh và đang tiến hành phục hồi trạng thái. Khi thực hiện các segues bình thường, tôi muốn có chúng animate, nhưng khi tôi khôi phục lại một số cấp độ của một hệ thống phân cấp điều hướng, tôi chỉ muốn segue cuối cùng để animate. Khác với việc thiết lập hai bộ segues - một bộ sử dụng một segue push bình thường, và một bộ khác sử dụng một segue push không hoạt hình tùy chỉnh - có cách nào để đạt được những gì tôi đang cố gắng làm không?Đẩy segue mà không có hoạt ảnh

Trả lời

14

Có thể trực tiếp thao tác ngăn xếp bộ điều khiển chế độ xem, độc lập với phân đoạn hoặc bảng phân cảnh của ứng dụng.

Bạn có thể sử dụng kỹ thuật này để khôi phục bộ điều khiển chế độ xem sâu và thực hiện/chỉ hoạt động một khoảng cách duy nhất cho bộ điều khiển chế độ xem trên cùng. (Bạn có thể sẽ cần tạo một khoảng cách đẩy cụ thể cho mục đích này.)

Ví dụ, để khôi phục ngăn xếp bộ điều khiển hai chế độ xem, bạn có thể làm như sau. Trong ví dụ này, nó giả định rằng một số hành động trên một bộ điều khiển xem hiện có dẫn đến khôi phục trạng thái, nhưng bạn có thể dễ dàng thực hiện nó từ App Delegate của bạn.

[self performSegueWithIdentifier:@"Page2Express" sender:self]; 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Page2Express"]) 
    { 
     // Get any state data you need to from Core Data 
     CoreDataType *valuePulledFromCoreData = // ... 

     // Set up the page 2 view controller as you normally would 
     Page2ViewController *page2ViewController = segue.destinationViewController; 
     page2ViewController.instanceVariable = valuePulledFromCoreData; 

     // Create a loose, page 1 view controller and set it up as required 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
     Page1ViewController *page1ViewController = [storyboard instantiateViewControllerWithIdentifier:@"Page1ViewController"]; // Ensure you have this identifier set up in your storyboard 
     page1ViewController.instanceVariable = valuePulledFromCoreData; 

     // Add the page 1 view controller to the top of the navigation stack (to be later obscured in the segue by the page 2 view controller) 
     NSMutableArray *viewControllers = [[self navigationController].viewControllers mutableCopy]; 
     [viewControllers addObject:page1ViewController]; 
     [self navigationController].viewControllers = viewControllers; 
    } 
} 

Nếu, thay vào đó, bạn không muốn có hoạt ảnh thì vẫn dễ dàng hơn. Bạn có thể khôi phục trạng thái chỉ bằng cách thao tác ngăn xếp bộ điều khiển chế độ xem (và không sử dụng bất kỳ khoảng cách nào) từ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions- (void)applicationWillEnterForeground:(UIApplication *)application.

Dù bằng cách nào cũng sẽ hoạt động liền mạch và song song với (các) bảng phân cảnh và phân đoạn hiện có của bạn.

+0

Không quan tâm, có lý do nào bạn thao tác mảng 'viewControllers' thay vì sử dụng' pushViewController: animated: '? –

+4

'pushViewController: hoạt hình:' không chỉ thêm bộ điều khiển chế độ xem vào ngăn xếp - nó cũng làm mới chế độ xem để hiển thị bộ điều khiển chế độ xem đó. Trong trường hợp này, chúng ta không muốn thấy 'page1ViewController', thậm chí một thời gian ngắn, vì vậy chúng ta phải thêm nó vào ngăn xếp trực tiếp. –

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