2010-11-06 27 views
9

Ứng dụng của tôi có 3 mục tab tab, mỗi mục được ánh xạ tới một bộ điều khiển chế độ xem riêng biệt. Vấn đề của tôi là bộ điều khiển đầu tiên là một bộ điều khiển UINavigation, và nó khoan xuống khoảng 3 cấp độ sâu. Tôi không gặp vấn đề gì với điều hướng, nhưng khi tôi nhấp vào một mục tab khác và sau đó khi tôi quay trở lại mục tab đầu tiên (mục có bộ điều khiển UINav), tôi muốn nó đặt lại về bộ điều khiển đầu tiên trong trình tự nav.Đặt lại UINavigationController thành bộ điều khiển đầu tiên khi thanh tab được nhấp

Tôi đọc mà bạn phải làm một cái gì đó như:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    [[self navigationController] popViewControllerAnimated:NO]; 
} 

Nhưng tôi không chắc chắn nơi tôi nên đặt phương pháp này. Ai là đại biểu cho bộ điều khiển thanh tab? Nó được thiết lập trong AppDelegate ... nó có nên đi vào đó không?

Cảm ơn.

Trả lời

12

Chắc chắn, trong appdelegate của bạn khi bạn đang tạo các UITabBarController bạn có thể đặt đại biểu thanh điều khiển của tab để được tự (ví dụ: các appdelegate). Sau đó, bạn có thể đặt phương thức tabBar: didSelectItem: trong AppDelegate của bạn và nó sẽ được gọi bất cứ khi nào người dùng gõ một UITabBarItem. Tôi sẽ tạo một thuộc tính biến cá thể trong AppDelegate của bạn và giữ một tham chiếu đến UITabBarItem được sử dụng cho thẻ điều khiển Nav (Hãy gọi nó là tabBarItemForNavControllerTab). Bạn cũng nên có một tham chiếu tới bộ điều khiển nav sống trong đó tab đầu tiên để bạn có thể kiểm soát nó từ appdelegate (Hãy gọi nó là navControllerInFirstTab)

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    if (item != self.tabBarItemForNavControllerTab) { 
     [self.navControllerInFirstTab popToRootViewControllerAnimated:NO]; 
    } 
}

Bạn có thể sử dụng popToRootViewControllerAnimated: trên UINavigationController thay popping mỗi một ngăn xếp riêng lẻ.

+0

Hmm ... có ý nghĩa hoàn hảo, nhưng tôi dường như không nhận được tabBar: didSelectItem: để trả lời (tôi chỉ có một tuyên bố NSLog() trong đó bây giờ, và không có gì hiển thị). Tôi đặt [tabBarController setDelete: self]; nhưng không có gì. – rpheath

+2

Được rồi, tôi đã tìm ra. Tôi đã phải sử dụng '- (void) tabBarController: (UITabBarController *) tabBarController didSelectViewController: (UIViewController *) viewController' thay thế. Cảm ơn! – rpheath

1

Bạn cần phải thiết lập cho mình như các đại biểu cho thanh tabbar và thực hiện - TabBar: didSelectItem: các bạn hỏi bộ điều khiển chuyển hướng cho quan điểm của mình [[tự navigationController] viewControllers] mà trả về một NSArray của UIViewControllers, sau đó bật mỗi bộ điều khiển xem trong mảng cho đến khi bạn đến chế độ xem gốc.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITabBarDelegate_Protocol/Reference/Reference.html

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