2012-06-08 13 views
7

Trong tập tin tiêu đề của tôi, tôi có điều này:TabBar didSelectItem dường như không có tác dụng

@interface TabBarController : UIViewController <UIApplicationDelegate, UITabBarDelegate, UITabBarControllerDelegate>{ 

    IBOutlet UITabBarController *tabBarController; 

} 

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item; 

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 

@end 

Trong tập tin chính của tôi, tôi có điều này:

@synthesize tabBarController; 

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    self.tabBarController.delegate = self; 
    self.view = tabBarController.view; 
} 

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{ 
    NSLog(@"rawr"); 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
} 

- (void)dealloc { 
    [tabBarController release]; 
    [super dealloc]; 
} 


@end 

Tôi đã kết nối tôi tabbarcontroller như một đại biểu đến chủ sở hữu tệp của tôi trong trình tạo giao diện nhưng vẫn không bao giờ gọi phương thức didSelectItem.

Có bất kỳ điều gì tôi thiếu ở đây không?

Tôi đã thêm tabBarController.delegate = self; và nó vẫn không hoạt động.

+1

Nếu bạn làm điều đó theo lập trình thì sao? I. e., 'TabBarController.delegate = self;'? –

+0

nó stil không hoạt động :( –

Trả lời

1

Bạn cần phải thêm này:

tabbarcontroller.delegate = self; 
+0

thử thêm: - (void) {viewDidLoad \t [siêu viewDidLoad]; \t tabBarController.delegate = tự; \t self.view = tabBarController.view; } vẫn không hoạt động –

0

Bạn đã tổng hợp các thanh tab, vì vậy bây giờ bạn cần phải viết: self.tabBarController.delegate = self;

+0

Cố gắng thêm: - (void) {viewDidLoad \t [siêu viewDidLoad]; \t self.tabBarController.delegate = tự; \t self.view = tabBarController.view; } vẫn không hoạt động –

0

Chỉ cần thiết lập các đại biểu cho thanh tab. Bạn có thể làm điều đó bằng cách đặt self.tabBarController.delegate = self; hoặc sử dụng Trình tạo giao diện làm cho đối tượng thanh điều khiển (không phải thanh) xem trình kiểm tra kết nối và kéo kết nối trên chủ sở hữu của tệp.

+0

đã làm, nhưng vẫn không hoạt động –

+0

Có lẽ tôi đã tìm ra. Nếu bạn muốn rằng phương thức - (void) tabBar: (UITabBar *) tabBar didSelectItem: (UITabBarItem *) item; được gọi là bạn nên đặt thuộc tính ủy nhiệm tabbar thành tự. Vì vậy, hãy thử một cái gì đó như self.tabBarController.tabBar.delegate = tự; – Andrea

+0

nó không hoạt động, nếu tôi đặt self.tabBarController.tabBar.delegate = self; trong viewDidLoad. nó mang lại cho tôi một lỗi Chấm dứt ứng dụng do ngoại lệ chưa được thực hiện 'NSInternalInconsistencyException', lý do: 'Thay đổi đại biểu của thanh tab được quản lý bởi một thanh điều khiển thanh tab không được phép.' –

15
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item; 

Phương pháp này là một phương pháp đại biểu cho UITabBar, không UITabBarController, vì vậy

self.tabBarController.delegate = self; 

sẽ không hoạt động.

điều khiển Tab thanh có UITabBar riêng của mình, nhưng thay đổi các đại biểu của một thanh tab bởi một bộ điều khiển thanh tab quản lý không được phép, vì vậy chỉ cần thử phương pháp UITabBarControllerDelegate như thế này:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
+4

Đừng quên thêm '' vào .h của ủy nhiệm ứng dụng của bạn và một cái gì đó như 'UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; tabBarController.delegate = self; 'trong phương thức' didFinishLaunchingWithOptions'. – Patrick

-1

Có nhiều lý do, như đã nêu ở trên, tại sao nó có thể không hoạt động. Đây là một lý do tinh tế hơn. Nếu bạn đang tạo giao diện người dùng theo chương trình (không có bảng phân cảnh hoặc Xib), bạn cần đặt màn hình giao diện người dùng của mình.

self.window = [[UIWindow alloc] init]; 
self.window.screen = [UIScreen mainScreen]; // <- The UITabViewController will not 
              // accept taps without this. 

Nếu bạn đang sử dụng Xib, tôi tin rằng điều này tương đương với việc chọn "Full Screen at Launch". Điều đó phải được kiểm tra hoặc tôi đã nhận thấy Tab của tôi không hoạt động.

Cập nhật: Dù sao, hãy bỏ phiếu cho tôi nếu bạn phải nhưng tôi có bộ điều khiển tab không hoạt động và đây là những gì tôi phải làm để làm việc. Không có câu trả lời nào khác trên trang này đã giúp tôi. Tôi cho rằng bằng cách sử dụng một xib/storyboard là khá hiếm những ngày này (tôi nghĩ rằng đây là từ iOS 5 ngày) nhưng để lại ở đây cho người đó và tình cờ gặp tình huống này.

1

Sử dụng UITabBarControllerDelegate thay vì UITabBarDelegate
-tabBarController:didSelectViewController{} thay vì tabBar:didSelectItem{}

Interface

@interface TabBarController : UIViewController <UIApplicationDelegate, UITabBarControllerDelegate, UITabBarControllerDelegate>{ 

    IBOutlet UITabBarController *tabBarController; 
} 
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 
@end 

tập tin chính

@implementation TabBarController 
    @synthesize tabBarController; 

    /*other stuff*/ 
    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 
     NSLog(@"rawr"); 
    } 
    /*other stuff*/ 
@end 
+1

Tôi chỉ tự mình gặp vấn đề này và giải pháp này hoạt động hoàn hảo. Cảm ơn bạn! – CodeNoob