2013-07-16 15 views
22

Tôi đang cố gắng tạo hiệu ứng chuyển tiếp giữa các tab trong UITabBarController của tôi, nó hoạt động tốt khi tôi nhấn vào các nút tab. Tuy nhiên, khi tôi chuyển sang tab lập trình bằng cách gọiLàm thế nào tôi có thể lập trình thiết lập tab được chọn của UITabBarController trong khi cũng kích hoạt shouldSelectViewController trong UITabBarControllerDelegate

[self.tabBarController setSelectedIndex:2]; 

trong một trình nhận dạng cử chỉ swipe, hàm shouldSelectViewController KHÔNG được gọi trong đoàn UITabBarControllerDelegate của tôi, và do đó hoạt hình của tôi không được kích hoạt.

Có cách nào để thực hiện những gì tôi muốn không? Tôi có thể lập trình kích hoạt công tắc tab khác nhau có lẽ sao cho hàm shouldSelectViewController được gọi?

+1

Có, bạn có thể gọi đại biểu một cách khẩn cấp. Nó sẽ hoạt động. [self.tabBarController setSelectedIndex: 2]; sẽ cung cấp hiệu ứng được tô sáng cho thanh tabbaritem tương ứng –

+0

@Puneet Làm cách nào để gọi phương thức shouldSelectViewController của đại biểu UITabBarControllerDelegate? – herrtim

+2

Nếu bạn đã đặt thanh điều khiển tab làm thư mục gốc của ứng dụng, bạn phải đặt phương thức ủy nhiệm của mình tại đại biểu ứng dụng. Vì vậy, bạn có thể gọi nó từ chế độ xem khác Comtrollers bằng cách tạo một đối tượng của AppDelegate. bạn cần phải vượt qua hai tham số, một là tabbarController, mà bạn có thể lấy f4rom appdelegate là tốt và khác là ViewController mà bạn muốn hiển thị. –

Trả lời

45

Nếu bạn đã triển khai - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController trong ủy quyền của tabBarController, bạn có thể gọi nó theo cách thủ công.

[self.tabBarController.delegate tabBarController:self.tabBarController shouldSelectViewController:[[tabBar viewControllers] objectAtIndex:2]]; 
[self.tabBarController setSelectedIndex:2]; 

Hy vọng điều này sẽ hữu ích.

+0

Hoàn hảo, cảm ơn. Cùng với những bình luận của Puneet ở trên, tôi đã làm việc đó! – herrtim

+10

Không, các phương thức đại biểu KHÔNG dành cho việc gọi thủ công! Phương pháp này nên được gọi nếu có điều gì đó xảy ra. Với giải pháp của bạn, tôi có thể đặt 'return NO' trong' - (BOOL) tabBarController: shouldSelectViewController: 'và controller vẫn sẽ được chọn. – Kuba

+0

Thiên tài. Cảm ơn rất nhiều. – NaXir

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