2010-05-26 19 views
6

Tôi đang cố gắng chọn không có tab nào trong ứng dụng của mình. Lúc đầu, tab đầu tiên được chọn, nhưng tôi muốn bỏ chọn nó vì vậy không có tab nào được chọn.Chọn không có tab nào trong UITabBar

Đừng hỏi tôi tại sao, đó chỉ là cách khách hàng muốn! hehe

Cảm ơn sự giúp đỡ của bạn!

PS: Tôi đã cố gắng:

// rootController = UITabBarController  
rootController.tabBar.selectedItem = 0; 
rootController.tabBar.selectedItem = nil; 
[rootController setSelectedIndex:[rootController.items objectAtIndex:0]]; 
[rootController setSelectedIndex:nil]; 
[rootController setSelectedIndex:0]; 
// That one works : (but I can't select 0 or -1 for instance) 
[rootController setSelectedIndex:2]; 

Bất kỳ ý tưởng? Cảm ơn một lần nữa!

+0

Bạn có tìm thấy giải pháp nào cho vấn đề này không? Tôi cũng đang tìm giải pháp cho vấn đề này, hãy cho tôi biết nếu bạn tìm thấy giải pháp. –

Trả lời

0

Từ documentation:

điều khiển Quan điểm này là một trong những người có giao diện tùy chỉnh hiện đang được hiển thị bởi giao diện thanh tab. Bộ điều khiển xem được chỉ định phải nằm trong mảng viewControllers. Gán bộ điều khiển chế độ xem mới cho thuộc tính này thay đổi chế độ xem hiện được hiển thị và cũng chọn một tab thích hợp trong thanh tab. Thay đổi bộ điều khiển xem cũng cập nhật thuộc tính SelectedIndex cho phù hợp. Giá trị mặc định của thuộc tính này là 0.

Vì vậy, tôi giả sử bạn cần [rootController setSelectedViewController: nil];.

Cập nhật:

Để làm rõ một chút,

[self.tabBarController setSelectedViewController:nil];

Ngoài ra còn có tài liệu về preventing the selection of tabs đó có thể là hữu ích.

+0

Giống như tôi đã nói trong bit mã của câu hỏi của tôi: Nó không hoạt động, nó bị treo vì lý do này: 2010-05-26 12: 35: 22.091 PremierSoins [8449: 207] *** - [UITabBarController selectedViewController:]: bộ chọn không được nhận dạng được gửi tới ví dụ 0x4b43fb0 2010-05-26 12: 35: 22.093 PremierSoins [8449: 207] *** Chấm dứt ứng dụng do ngoại lệ chưa được nhận 'NSInvalidArgumentException', lý do: '*** - [UITabBarController selectedViewController:]: unrecognized bộ chọn được gửi tới ví dụ 0x4b43fb0 ' – TomShreds

+0

Mã trong câu hỏi của bạn không có điểm nào đề cập đến 'selectedViewController:'. 'setSelectedIndex:' không giống nhau. –

+0

Bạn cũng cần phải gọi '-setSelectedViewController:', không chỉ '-selectedViewController:' ... –

7

Bạn có thể bỏ chọn tất cả các mục trên thanh tab nếu bạn đang sử dụng cá thể UITabBar không có UITabBarController.

Trong trường hợp này, mã bên dưới hoạt động tốt.

[tabBar setSelectedItem:nil]; 

Nếu UITabBar là một phần của UITabBarController sau đó ứng dụng sẽ sụp đổ với ngoại lệ:

'trực tiếp sửa đổi một thanh tab quản lý bởi một bộ điều khiển thanh tab không phải là phép.'

Nói cách khác nếu bạn muốn làm việc này, bạn cần quản lý thủ tục của tabbar theo cách thủ công mà không cần bộ điều khiển.

+0

wow đây là một mẹo thực sự – code4j

1

Cuối cùng tôi quản lý để thực hiện điều này bằng cách sử dụng đoạn mã sau:

 DefaultView *defaultView = [[DefaultView alloc]initWithNibName:@"DefaultView" bundle:[NSBundle mainBundle]]; 
     [self.tabBarController setSelectedViewController:nil]; 
     [self.tabBarController setSelectedViewController:defaultView]; 

Lưu ý rằng chỉ làm [self.tabBarController setSelectedViewController:nil]; sẽ không làm bất cứ điều gì. Bạn CÓ TOÁN chỉ định bộ điều khiển chế độ xem. Bộ điều khiển xem này sẽ được hiển thị mà không có biểu tượng tabBar nào được chọn. Khi chọn các tùy chọn TabBar khác, chế độ xem mặc định sẽ biến mất và chế độ xem được yêu cầu sẽ được tải.

+2

Điều này được sử dụng để làm việc nhưng bị hỏng kể từ iOS 5.0. Trên dòng thứ ba của mã, các lỗi sau đây sẽ bật: 'chỉ có một bộ điều khiển xem trong danh sách điều khiển bộ điều khiển xem thanh tab có thể được chọn.' – scalbatty

+1

Không làm việc cho tôi. –

2

Tôi vừa bắt gặp câu hỏi này và nó thực sự rất đơn giản:

tabBarController.selectedViewController = viewController; 

này có phần giống với câu trả lời HG, nhưng thiết lập bộ điều khiển xem đã chọn để nil là không cần thiết.

0

Có phương pháp nào tốt hơn không?

use [self.tabBarController setSelectedViewController:nil], 
Warning : "-[UITabBarController setSelectedViewController:] only a view controller in the tab bar controller's list of view controllers can be selected." 
0

Tôi nghĩ rootController.tabBar.selectedItem = 0;

nó sai bất cứ điều gì bạn đã cố gắng. Bởi vì khi bạn đang đặt selectedItem=0, thì chắc chắn nó sẽ lấy tabBarItem đầu tiên của tabBarController.

1

Tốt hơn để thay đổi hình ảnh đã chọn bất cứ khi nào bạn muốn & làm cho chế độ xem ẩn hoặc hiển thị theo yêu cầu của bạn. Đây là đoạn mã của tôi có thể giúp bạn hiểu:

-(void)viewWillAppear:(BOOL)animated{ 
    if ([[NSUserDefaults standardUserDefaults]integerForKey:@"flagAsk"]) { 
     UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0]; 
     firstTab.selectedImage = [[UIImage imageNamed:@"Ask2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; 
       vieToHide.hidden=YES; 
    } 
    else{ 
     UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0]; 
     firstTab.selectedImage = [[UIImage imageNamed:@"Ask"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; 
     vieToHide.hidden=NO; 
    } 
} 
Các vấn đề liên quan