2011-01-31 13 views
6

Tôi có thiết lập UITabBarController với 2 UINavigationControllers.Nhấp đúp vào tab UITabBarControllers chuyển đến thư mục gốc của Trình điều khiển điều hướng

Một UINavigationController có một UIViewController, UINavigationController khác có hai UIViewControllers. Nếu bạn sau đó điều hướng đến UIViewController thứ hai và nhấp vào Tab đã được chọn nó sẽ đưa bạn đến thư mục gốc của UINavigationController (Đây sẽ là UIViewController đầu tiên).

Có cách nào để ngăn điều này xảy ra không? Tôi không muốn người dùng có thể nhấp vào một Tab đã chọn để chuyển đến thư mục gốc của Trình điều khiển Điều hướng.

Trả lời

17

Để thực hiện việc này, bạn cần phải triển khai chức năng trong ứng dụng ủy quyền để nhận cuộc gọi đại biểu thanh tabbar.

Trong file delegate.m ứng dụng của bạn, trong phương pháp didfinishlaunching, thêm dòng này

[tabBarController setDelegate:self]; 

sau đó thực hiện phương pháp này (cũng trong đại biểu ứng dụng của bạn):

- (BOOL)tabBarController:(UITabBarController *)theTabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    return (theTabBarController.selectedViewController != viewController); 
} 

này được gọi là một phần của giao thức ủy nhiệm tab và sẽ dừng việc lựa chọn một tab nếu nó đã được chọn.

Hy vọng điều đó sẽ hữu ích.

+0

Tác phẩm này, ngoại trừ TabBarController của tôi là một phần của một ViewController khác. Vì vậy, thay vì thiết lập các đại biểu trong App delegate tôi đặt nó trong ViewController thích hợp. Cảm ơn! – Mausimo

+1

Thay vì đặt điều này trong ủy nhiệm ứng dụng, tôi đã phân lớp TabBarViewController và đặt đại biểu lớp con là self.delegate = self. Sau đó, trong bảng phân cảnh, tôi chọn lớp con cho tabbarviewcontroller của tôi. – nearpoint