问题描述
我有一个 UITabBarControllerDelegate
方法确定 UITabBarItem
的标题,并做相应的事情。这适用于我的 UITabBar
中的项目,但当我点击更多按钮,我的 UITabBarItems
UITableView
。
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if([self.tabBarController.selectedViewController.title isEqualToString:@All]){
// do something
}
}
UITabBarController,您提到的方法将被调用,最重要的是,当前显示的视图控制器将作为参数传递给您;您可以使用以下代码查找控制器的类和标题,包括更多控制器:
- void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSLog(@controller class:%@,NSStringFromClass([viewController class]))
NSLog(@controller title:%@,viewController.title);
}
在快速测试中,只需在Xcode中添加几个控制器是在控制台中获得的:
2011-03-28 09:13:21.795 TabTest [39015:207] controller类:UIViewController
2011-03-28 09:13:21.797 TabTest [39015:207] controller title:(null)
2011-03-28 09:13:23.922 TabTest [39015:207] controller class :UITableViewController
2011-03-28 09:13:23.925 TabTest [39015:207] controller title:(null)
2011-03-28 09:13:24.505 TabTest [39015:207] controller class :UITableViewController
2011-03-28 09:13:24.506 TabTest [39015:207] controller title:(null)
2011-03-28 09:13:24.945 TabTest [39015:207] controller class :UIMoreNavigationController
2011-03-28 09:13:24.945 TabTest [39015:207] controller title:更多
另一方面,当你选择一个控制器里的更多列表,你不会在你的UITabBarControllerDelegate方法通知(奇怪,IMHO)。为了帮助您在列表中选择控制器时收到通知,您可以执行以下操作:
- (void)tabBarController :( UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSLog(@controller class:%@,NSStringFromClass([viewController class]))
NSLog(@controller title:%@,viewController.title);
if(viewController == tabBarController.moreNavigationController)
{
tabBarController.moreNavigationController.delegate = self;
}
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if(navigationController == self.tabBarController.moreNavigationController)
{
NSLog(@more controller class:%@,NSStringFromClass([viewController class]))
NSLog(@more controller title:%@,viewController.title);
}
}
您的类还应实现UINavigationControllerDelegate协议。
这是运行示例的结果,使用上面的代码并在UITabBar和more列表中点击几次:
2011-03-28 09:27:42.496 TabTest [39113:207] controller类:UIViewController
2011-03-28 09: 27:42.498 TabTest [39113:207]控制器类:UIMoreNavigationController
2011-03-28 09:27:42.498 TabTest [39113:207]控制器标题:(null)
2011-03-28 09:27: 27:44.307 TabTest [39113:207] controller title:更多
2011-03-28 09:27:44.310 TabTest [39113:207]更多控制器类:UIMoreListController
2011-03-28 09:27 :44.311 TabTest [39113:207]更多控制器标题:更多
2011-03-28 09:27:45.632 TabTest [39113:207]更多控制器类:SecondViewController
2011-03-28 09:27 :45.634 TabTest [39113:207] more controller title:(null)
2011-03-28 09:27:47.156 TabTest [39113:207]更多控制器类:UIMoreListController
2011-03-28 :27:47.156 TabTest [39113:207]更多控制器标题:更多
2011-03-28 09:27:48.581 TabTest [39113:207]控制器类:UITableViewController
2011-03-28 09: 27:48.582 TabTest [39113:207] controller title(null)
希望这有帮助! p>
I have a UITabBarControllerDelegate
method that determines the title of the UITabBarItem
and does something accordingly. This works well for items in my UITabBar
but when I click on the More button the rest of my UITabBarItems
are in a UITableView
. How can I determine the title in the More section?
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if ([self.tabBarController.selectedViewController.title isEqualToString:@"All"]) {
//do something
}
}
Whenever you select a view controller in your UITabBarController, the method you mention will be called, and most important, the view controller currently shown will be passed to you as parameter; you can then use the following code to find the class and title of the controller, including the "more" controller:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"controller title: %@", viewController.title);
}
In a quick test, just by adding a couple of controllers in Xcode, this is what you get in the console:
2011-03-28 09:13:21.795 TabTest[39015:207] controller class: UIViewController
2011-03-28 09:13:21.797 TabTest[39015:207] controller title: (null)
2011-03-28 09:13:23.922 TabTest[39015:207] controller class: UITableViewController
2011-03-28 09:13:23.925 TabTest[39015:207] controller title: (null)
2011-03-28 09:13:24.505 TabTest[39015:207] controller class: UITableViewController
2011-03-28 09:13:24.506 TabTest[39015:207] controller title: (null)
2011-03-28 09:13:24.945 TabTest[39015:207] controller class: UIMoreNavigationController
2011-03-28 09:13:24.945 TabTest[39015:207] controller title: More
On the other side, when you select a controller inside the "more" list, you won't be notified in your UITabBarControllerDelegate method (weird, IMHO). To help you get notifications when you select controllers in that list, you could do the following:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"controller title: %@", viewController.title);
if (viewController == tabBarController.moreNavigationController)
{
tabBarController.moreNavigationController.delegate = self;
}
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (navigationController == self.tabBarController.moreNavigationController)
{
NSLog(@"more controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"more controller title: %@", viewController.title);
}
}
Your class should also implement the UINavigationControllerDelegate protocol, of course.
This is the result of a sample run, using the above code and tapping a couple of times in the UITabBar and the "more" list:
2011-03-28 09:27:42.496 TabTest[39113:207] controller class: UIViewController
2011-03-28 09:27:42.498 TabTest[39113:207] controller title: (null)
2011-03-28 09:27:44.306 TabTest[39113:207] controller class: UIMoreNavigationController
2011-03-28 09:27:44.307 TabTest[39113:207] controller title: More
2011-03-28 09:27:44.310 TabTest[39113:207] more controller class: UIMoreListController
2011-03-28 09:27:44.311 TabTest[39113:207] more controller title: More
2011-03-28 09:27:45.632 TabTest[39113:207] more controller class: SecondViewController
2011-03-28 09:27:45.634 TabTest[39113:207] more controller title: (null)
2011-03-28 09:27:47.156 TabTest[39113:207] more controller class: UIMoreListController
2011-03-28 09:27:47.156 TabTest[39113:207] more controller title: More
2011-03-28 09:27:48.581 TabTest[39113:207] controller class: UITableViewController
2011-03-28 09:27:48.582 TabTest[39113:207] controller title: (null)
Hope this helps!
这篇关于如何获得UITabBarItem的标题在更多部分?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!