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上不需要的填充

xamarin.ios 中的 UITabBarController 不使用 StoryBoard

iOS 7 - 呈现模式视图控制器选择 UITabBarController 中的第一个选项卡