iOS,UITabBarController 中的问题
Posted
技术标签:
【中文标题】iOS,UITabBarController 中的问题【英文标题】:iOS, Problems in the UITabBarController 【发布时间】:2013-10-18 12:19:12 【问题描述】:我的bug如下:
在 ViewList 中,我有下面的代码,它确实推送了 ViewManager;
- (Void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath
PropertyManagerViewController propertyManagerViewController * = [[PropertyManagerViewController alloc] initWithNibName: @ "PropertyManagerViewController" bundle: nil];
[self.navigationController pushViewController: propertyManagerViewController animated: YES];
在 ViewManager 中创建 UITabBarController :
- (void) createTabBarController
[ ShowTabBarController showTabBar : self.navigationController.tabBarController ] ;
NSMutableArray * viewControllers = [ [ NSMutableArray alloc ] init ] ;
UITabBarController * TabBarController = [ [ UITabBarController alloc ] init ] ;
ViewController * viewController = [ [ ViewController alloc ] initWithNibName : @ " ViewController " bundle: nil ] ;
UINavigationController * navigationController = [ [ UINavigationController alloc ] initWithRootViewController : ViewController ] ;
[ ViewControllers addObject : navigationController ] ;
ViewController2 viewController2 * = [ [ VisitDetailsViewController alloc ] initWithNibName : @ " ViewController2 " bundle: nil ] ;
UINavigationController * navigationController2 = [ [ UINavigationController alloc ] initWithRootViewController : ViewController2 ] ;
[ ViewControllers addObject : navigationController2 ] ;
tabBarController.viewControllers = viewControllers ;
self.navigationController.tabBarController.viewControllers = tabBarController.viewControllers ;
.
在 ViewController 和 ViewViewController2 中都有这个方法来推送 ViewList。
-(void)pushTableList
[ShowTabBarController hideTabBar:self.tabBarController];
PropertyListViewController *propertyList = [[PropertyListViewController alloc] initWithNibName:@"PropertyListViewController" bundle:nil];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.75];
[self.navigationController pushViewController:propertyList animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.navigationController.view cache:NO];
[UIView commitAnimations];
我现在的问题是:
当我在 ViewController2 pushTableList 并且我要去 viewlist 时。 然后选择另一行,执行 push ViewManager,显示给我的视图是最后一个,在本例中为 ViewController2。更新:
我想单击表格单元格,然后推送 ViewController。问题是:我单击单元格,当我推送到 ViewList 时,视图显示 ViewContoller 2(这是我拥有的最后一个视图)。
新更新
1 - 推送并创建 UITabBArController
-(Void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath
PropertyManagerViewController propertyManagerViewController * = [[PropertyManagerViewController alloc] initWithNibName: @ "PropertyManagerViewController" bundle: nil];
[self.navigationController pushViewController: propertyManagerViewController animated: YES];
- (void) createTabBarController
[ ShowTabBarController showTabBar : self.navigationController.tabBarController ] ;
NSMutableArray * viewControllers = [ [ NSMutableArray alloc ] init ] ;
UITabBarController * TabBarController = [ [ UITabBarController alloc ] init ] ;
ViewController * viewController = [ [ ViewController alloc ] initWithNibName : @ " ViewController " bundle: nil ] ;
UINavigationController * navigationController = [ [ UINavigationController alloc ] initWithRootViewController : ViewController ] ;
[ ViewControllers addObject : navigationController ] ;
ViewController2 viewController2 * = [ [ VisitDetailsViewController alloc ] initWithNibName : @ " ViewController2 " bundle: nil ] ;
UINavigationController * navigationController2 = [ [ UINavigationController alloc ] initWithRootViewController : ViewController2 ] ;
[ ViewControllers addObject : navigationController2 ] ;
ViewController3 viewController3 * = [ [ VisitDetailsViewController alloc ] initWithNibName : @ " ViewController3 " bundle: nil ] ;
UINavigationController * navigationController3 = [ [ UINavigationController alloc ] initWithRootViewController : ViewController2 ] ;
[ ViewControllers addObject : navigationController3 ] ;
tabBarController.viewControllers = viewControllers ;
self.navigationController.tabBarController.viewControllers = tabBarController.viewControllers ;
2 - 选择 TabBarITem 访问详情并点击 UIBarButtonItem 属性列表
3 - 单击数据表的单元格。
4 - 这是我的问题。如果您回头看 tabbaritem 访问。我要你给我看 PropertyItem
【问题讨论】:
“应该发生什么并想告诉我的是,如果 ViewController 而不是最后一个视图”???? 我真的很想帮忙,但我不明白这个问题。您能否将这些要点添加到您的问题中: 1. 您要做什么? 2. 你打算怎么做? 3. 意外的结果是什么? @JohannesFahrenkrug 新帖子! 您的视图层次结构真的很混乱。我很乐意为您提供帮助,但您需要将自己的想法写在故事板上,并了解一些关于 View Controllers 的基础知识。 【参考方案1】:您可能想查看此文档:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/AboutViewControllers/AboutViewControllers.html
一条非常重要的信息:UITabBarController 始终必须是***控制器!不允许将 UITabBarController 放在 UINavigationController 中。但是,您可以将 UINavigationController 放在 UITabBarController 中。 Apple docs 关于 UINavigationController 的 pushViewController:animated: 方法说:
被压入堆栈的视图控制器。这个对象不能 是标签栏控制器的一个实例,它不能已经在 导航堆栈。
我希望这能为您指明正确的方向。
【讨论】:
以上是关于iOS,UITabBarController 中的问题的主要内容,如果未能解决你的问题,请参考以下文章
ios 6 中的 UITabBarController 旋转问题
UINavigationController 中的 UITabBarController 适用于 iOS 8 但不适用于 7
从ios中的UITabBarController中删除标签栏的安全方法
UITabBarController中的UITableViewController = iOS 11上不需要的填充