如何在多个tableViewControllers(没有故事板)的情况下pushViewController

时间:2014-02-13 04:27:18

标签: ios cocoa uitabbarcontroller pushviewcontroller

当桌面视图控制器由于用户与不是应用程序主视图的标签栏控制器交互而出现时,我不知道如何实现表视图控制器的详细视图。我想我需要创建第二个UINavigationController,但我不知道如何将它集成到将使用它的主视图控制器和详细视图控制器中,尽管我有一个适用于我的主视图控制器的导航控制器{{ 1}}

(我读过PushViewController with tabBarController not working

我不是使用故事板。

我的应用程序的根视图是一个名为(EdgewoodSecretsMasterViewController)的表视图控制器。用户可以在其填充的表中选择一行,显示详细视图,然后返回EdgewoodSecretsMasterViewController表视图。

此主视图底部还有一个标签栏。它有3个选择。一个是EdgewoodSecretsMasterViewController当用户启动应用程序时会出现。用户可以在表格中选择一行,在有关该选项的详细视图上查看信息并返回到表格视图。

在app delegate中我创建了一个EdgewoodSecrets类的vcMaster

EdgewoodSecretsMasterViewController

第二个标签栏选项是作者信息页面的信息视图。用户可以选择它,然后返回到原始表视图,但单击第一个选项卡栏选项

 EdgewoodSecretsMasterViewController *masterViewController = [[EdgewoodSecretsMasterViewController alloc] initWithNibName:@"EdgewoodSecretsMasterViewController" bundle:nil];

 UINavigationController * vcMaster = [[UINavigationController alloc] initWithRootViewController:masterViewController];

这两个选择按照我的要求运作。但不是第三个标签。 第三个选项卡是vcImportant

WhoIsAuthor* vcAu = [[WhoIsAuthor alloc] init];

这里我将所有选项卡选项放入标签栏控制器

   ImportantMasterViewController* vcImportant = [[ImportantMasterViewController alloc] init];

   initWithNibName:@"ImportantMasterViewController"
   bundle:nil ];

第三个选项卡选项会显示另一个表视图 - ImportantMasterViewController。该表视图填充了多个选项,但是当用户做出选择时,pushViewController指令对原始导航栏控制器一无所知。在推送点,self.navigationController没有值。我认为这是因为标签栏控制器是根视图控制器。所以我认为这是我不知道的最高级别/负责人。

PushViewController with tabBarController not working

我看到Alok Singh回答“对于每个标签,你需要创建一个单独的导航控制器”

我可以在appDelegate中创建第二个 UITabBarController *tabBar = [[UITabBarController alloc] init]; NSArray* controllers = [NSArray arrayWithObjects:vcMaster, vcAu,vcImportant, nil]; tabBar.viewControllers = controllers; [[self window] setRootViewController:tabBar]; 对象。但我不知道除了在app委托中设置它之外如何使用它

UINavigationController

似乎某处必须有一个堆栈,它保存最后一个被推送的对象。好像我应该在那个堆栈上推动我的所有视图控制器。

在EdgewoodSecretsMasterViewController中,我按这样推送我的详细视图

 UINavigationController * ncImportant = [[UINavigationController alloc]      
      initWithRootViewController:importantMasterViewController];

详细视图出现用户可以来回走动

在WhoIsAuthor中,我没有提出详细的从属视图

在ImportantMasterViewController中 我尝试像这样推送我的详细视图

 [self.navigationController pushViewController:self.detailViewController animated:YES];

详细视图未出现。 我知道执行到了这一步。 我也可以看到      self.navigationController 没有像 [self.navigationController pushViewController:self.importantDetailViewcontrollers animated:YES]; 此时那样的值

那就是 - 如果我理解另一个发布权 - 因为它需要它自己的导航控制器。但我不知道如何将我创建的导航控制器(ncImportant)与此推送相关联

我不知道如何通过思考,或者去阅读和理解它。

谢谢 月桂

2 个答案:

答案 0 :(得分:2)

您需要将所有标签选项放入标签栏控件中ncImportant而非vcImportant

UITabBarController *tabBar = [[UITabBarController alloc] init];

NSArray* controllers = [NSArray arrayWithObjects:vcMaster, vcAu,ncImportant,
                         nil];

tabBar.viewControllers = controllers;
[[self window] setRootViewController:tabBar];

答案 1 :(得分:1)

  1. UITabBarController设为rootViewController。

  2. 添加所有标签,在每个标签中,您可以使用

    初始化它

    a)UINagivationController反过来用a初始化 UIViewController个实例。 b)或只是你的UIViewContollers

  3. 在加载您的应用时,您始终可以选择应显示的特定标签。

  4. 然后,您可以使用Push或Modal方法将OtherViewContollers1显示为TabBarController项目中所选项目的详细信息。

  5. 见:

    • 这是我的Root ViewController(一个带有三个标签的标签栏)

    enter image description here

    • 这是DetailViewController,其中包含UITableView个实例。当我单击上表View中的项目时,它会在TabBar上以模态显示。 enter image description here

    • 了解它是如何以模态呈现的。

      enter image description here

    希望能帮助。