2009-12-04 36 views
28

Hành vi mặc định của UITabBarController là bật UINavigationController chứa vào bộ điều khiển xem gốc khi một tab cụ thể được khai thác lần thứ hai. Tôi có một trường hợp sử dụng cụ thể mà tôi muốn điều này không hoạt động tự động và tôi đang gặp khó khăn trong việc tìm cách ngăn chặn điều này.Ngăn chặn popToRootViewController tự động khi nhấn đúp vào UITabBarController

Có ai đó gặp phải điều này không và nếu có, bạn đã làm gì? Tôi có cần phải phân lớp UINavigationController và ghi đè lên popToRootViewController hoặc là có một cách đơn giản hơn?

Trả lời

56

Sử dụng phương thức tabBarController:shouldSelectViewController: của UITabBarControllerDelegate protocol.

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

Đừng quên đặt đại biểu của bộ điều khiển thanh tab cho đối tượng thực sự thực hiện phương thức ủy nhiệm này.

+0

Brilliant. Tôi không biết làm thế nào tôi bỏ lỡ điều đó trong giao thức đại biểu. Nó làm việc như một say mê. Cảm ơn! – NilObject

+0

Rất đẹp. Cám ơn vì đã chia sẻ! – pmk

14

đây là những gì tôi đã làm:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 

    if ([[tabBarController viewControllers] objectAtIndex:[tabBarController selectedIndex]] == viewController) 

      return NO; 

    return YES; 

} 

liên quan

1

Hành vi này là một chút lạ, nhưng một phím tắt tiện dụng trong trường hợp hệ thống phân cấp sâu!

Bạn có thể thực hiện theo phương pháp UITabBarControllerDelegate để vô hiệu hóa hệ thống phím tắt rộng này:

#pragma mark - 
#pragma mark UITabBarControllerDelegate 

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    UIViewController *tbSelectedController = tbc.selectedViewController; 

    if ([tbSelectedController isEqual:vc]) { 
     return NO; 
    } 

    return YES; 
} 
0

Dưới đây là phiên bản Swift 3:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 
    return viewController != tabBarController.selectedViewController 
} 
Các vấn đề liên quan