2012-03-13 17 views
10

Trong ứng dụng iOS của chúng tôi với ba lần lượt UIViewController, chúng tôi muốn bỏ qua phần giữa dựa trên một số điều kiện và chuyển trực tiếp từ thứ nhất đến thứ ba. Tuy nhiên, người dùng sẽ có thể quay lại chế độ thứ hai thông qua nút "Quay lại" trên bộ điều khiển thứ ba.Tình trạng bỏ qua UIViewController trong ứng dụng iOS 5 với UINavigatonController

Tôi đã thử [self performSegueWithIdentifier:@"segueId" sender:sender]; từ viewDidLoad, viewWillAppear nhưng điều này làm hỏng thanh điều hướng như được chỉ ra bởi nhật ký gỡ lỗi. Gọi mã này từ viewDidAppear hoạt động tốt, nhưng sau đó chế độ xem thứ hai đã được hiển thị, đó là những gì tôi đã cố gắng tránh ngay từ đầu.

Tôi cũng đã thử [self.navigationController pushViewController:vc animated:NO]; nhưng kết quả là thanh điều hướng bị hỏng tương tự, mặc dù bản ghi gỡ lỗi thời gian này không có các mục nhập như vậy.

Điều gì sẽ là cách được hỗ trợ để thực hiện việc này (nếu có thể)?

Mục tiêu là iPhone4 với iOS 5.1 và môi trường dev là Xcode 4.3.

Trả lời

8

Tôi sử dụng mã sau trong ứng dụng. Hoạt động chính xác như mong đợi.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    SecondViewController *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
    if (indexPath.row == 0) { 
     // skip second vc 
     ThirdViewController *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ThirdViewControllerViewController"]; 
     [self.navigationController pushViewController:secondVC animated:NO]; 
     [self.navigationController pushViewController:thirdVC animated:YES]; 
    } 
    else { 
     // push second vc 
     [self.navigationController pushViewController:secondVC animated:YES]; 
    } 
} 
+0

Cảm ơn rất nhiều vì đã trả lời. Để có thể thực hiện nó theo cách này, có vẻ như các bộ điều khiển không cần bất kỳ dữ liệu nào từ trước đó. Ngay bây giờ trong ứng dụng của chúng tôi, mỗi bộ điều khiển chuẩn bị dữ liệu có liên quan (dựa trên lựa chọn của người dùng) cho bộ điều khiển tiếp theo trong 'preparForSegue'. Đây là lý do tại sao tôi đã tìm kiếm một cái gì đó mà sẽ cho phép tôi "bỏ qua" (tức là như thể một segue được thực hiện tự động). Bạn đã cho tôi một ý tưởng để suy nghĩ về. Hãy để tôi làm việc trên nó và xem liệu tôi có thể kết hợp ý tưởng này vào ứng dụng hay không. – alokoko

+0

Có một số xáo trộn liên quan nhưng tôi đã nhận nó hoạt động. Tôi vẫn muốn có bằng cách nào đó là một cách để "bỏ qua" (có thể thông qua một segue hoặc một số cách khác) mà sẽ làm việc trong cùng một bộ điều khiển trước khi xem xuất hiện. – alokoko

+0

Một chi tiết tôi quên đề cập đến: Nút quay lại trên bộ điều khiển thứ ba sau khi bỏ qua được dán nhãn "Quay lại" thay vì tiêu đề của bộ điều khiển thứ hai vì nó sẽ nằm dưới trình tự bình thường. Điều này có nên được đặt thủ công không? – alokoko

2

Nếu bạn muốn bỏ qua một bộ điều khiển xem bạn chỉ có thể gọi UINavigationController setViewControllers:animated: Nó sẽ động với bộ điều khiển cuối cùng trong mảng cung cấp, và người dùng sẽ có thể "trở lại" ra khỏi đống đó.

Bạn có thể xây dựng dãy bộ điều khiển chế độ xem theo bất kỳ cách nào bạn muốn; có lẽ bắt đầu với các bộ điều khiển chế độ xem hiện tại:

NSMutableArray* newViewControllers = [[navController.viewcontrollers mutablecopy] autorelease]; 

[newViewControllers addObject: ...]; 

[navController setViewControllers: newViewControllers animated: YES]; 
+0

Cảm ơn. Điều này sẽ hữu ích khi có nhu cầu sửa đổi ngăn xếp sâu và/hoặc trong các tình huống phức tạp hơn. Ngay bây giờ đẩy bộ điều khiển xem theo thứ tự như được đề xuất bởi một áp phích khác đang hoạt động tốt. – alokoko