2010-01-20 6 views
28

Tôi có bộ điều khiển uinavigation. Sau khi đăng nhập tôi muốn loại bỏ các viewcontrollers như RegisterViewController, LoginViewController vv từ ngăn xếp UInavigationcontroller ..Làm thế nào để loại bỏ một bộ điều khiển xem cụ thể từ ngăn xếp uinavigationcontroller?

Tôi có nghĩa là tôi phải loại bỏ một bộ điều khiển xem cụ thể từ ngăn xếp? Làm thế nào nó có thể. ?

Tôi đã kiểm tra bài này

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller’s-root-view-controller/

Vì vậy, chúng ta có thể đưa nó vào một mảng như

NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers]; 

Nhưng làm thế nào để làm quá trình hơn nữa .. Câu hỏi này được săn tôi cho thời gian dài. .Xin vui lòng trả lời ..Cảm ơn trước

Trả lời

82
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers]; 
[allViewControllers removeObjectIdenticalTo: removedViewController]; 
navigationController.viewControllers = allViewControllers; 
+0

Cảm ơn bạn đã trả lời tôi.But tôi có nghi ngờ trong lần gửi thứ hai. LoginViewController * loginViewController = [LoginViewController alloc]; [allViewControllers removeObjectIdenticalTo: loginViewController]; Nhưng nó không hoạt động .. Nhưng khi tôi thử [allViewControllers removeObjectAtIndex: 0]; nó hoạt động. Tôi muốn một cái gì đó như thế bạn trả lời. tôi cũng đã thử [allViewControllers removeObjectIdenticalTo: @ "LoginViewController"]; Nhưng nó không hoạt động. Làm ơn làm ơn đi. Cảm ơn ... –

+0

Tôi đã có một số nghi ngờ về cách xóa chế độ xem cụ thể..Và tôi đăng câu hỏi cho câu hỏi đó và nhận câu trả lời .. http://stackoverflow.com/questions/2100450/how-to- check-a-uiviewcontroller-is-present-in-uinavigationcontroller-stack/2101034 # 2101034 –

+1

Một nơi nào đó trong mã của bạn mà bạn đã tạo, ví dụ: LoginViewController with + alloc và -initWithNibName: bundle :. Đó có thể là ứng dụng của bạn, tôi không biết ứng dụng của bạn được kiến ​​trúc như thế nào. Dù sao, để loại bỏ bộ điều khiển một cách đáng tin cậy, bạn phải giữ một tham chiếu đến bộ điều khiển (ví dụ như một chiếc ngà trong đại biểu ứng dụng của bạn). "RemovedViewViewController" trong đoạn mã trên chỉ là tham chiếu đó. Có, bạn có thể duyệt qua các mảng của bộ điều khiển xem tìm kiếm bộ điều khiển của một lớp cụ thể. Nhưng nếu một ngày bạn sẽ có hai hoặc ba người trong số họ khi bạn mở rộng ứng dụng của mình thì sao? 2 xu của tôi. – Costique

1

Ở đây tôi s giải pháp của tôi. Bạn có thể thiết lập thẻ hoặc một thuộc tính cố định cho các bộ điều khiển khung nhìn của bạn, sau đó bạn có thể đi qua ngăn xếp uinavigationcontroller để tìm kiếm khung nhìn đích (vcToRemove) và loại bỏ nó. Điều này có thể an toàn hơn. Mã:

NSInteger tag = vcToRemove.wvTag; 
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: vcToRemove.navigationController.viewControllers]; 
     int i = 1; 
     for (i = 1; i <=[allViewControllers count]; i++) { 
      UIViewController *vc = [allViewControllers objectAtIndex:i]; 
      if ([vc isKindOfClass:[MyWebViewController class]]) { 
       if (((MyWebViewController *)vc).wvTag == tag) { 
        [allViewControllers removeObjectAtIndex:i]; 
        break; 
       } 
      } 
     } 

     vcToRemove.navigationController.viewControllers = allViewControllers;