【问题标题】:How to handle the view controllers?如何处理视图控制器?
【发布时间】:2011-05-21 09:34:47
【问题描述】:

大家好,我正在开发一个应用程序。那里有一个带有 5 个按钮的主屏幕。单击每个按钮时,我想打开带有 5 个视图控制器的标签栏的屏幕。我的意思是当您单击按钮时标签栏已打开。标签栏视图上也有后退按钮。单击后退按钮时,我想弹回主屏幕,反之亦然。 如何做到这一点。任何教程,链接,示例代码将不胜感激。

非常感谢大家

【问题讨论】:

  • Zoozoo,有一个带有 5 个按钮的导航控制器的主屏幕,单击任何按钮我想在标签中打开应用程序,就像有 4 个标签一样。现在当标签视图出现时需要成为那里的后退按钮并单击我想导航回按钮的主屏幕。你现在得到我了吗

标签: iphone controller navigation tabbar


【解决方案1】:

导航堆栈中的标签栏控制器很复杂。因为每个选项卡控制器本身也可以有导航控制器。

有一个WindowManager 类。它应该同时拥有 - FirstViewController 和 - TabbarController

所有组件和 UITabbarControllers 本身都应该在 WindowManager 类中实例化。 它的init 可能有这样的代码,对两个tabbarcontrollers 进行类似的处理。

self.tabBarController = [[UITabBarController alloc] init];
    self.controllers = [[NSMutableArray alloc] init];

// initialize the view controllers and navigation controllers for the tab bar

self.friendsVC = [[FriendsVC alloc] initWithNibName:@"FriendsView" bundle:nil];
UINavigationController *friendsNVC = [[UINavigationController alloc] initWithRootViewController: friendsVC];
friendsNVC.navigationBar.barStyle = UIBarStyleBlack;
[controllers addObject:friendsNVC];  
[friendsNVC release];

self.paymentsVC = [[PaymentsVC alloc] initWithNibName:@"PaymentsView" bundle:nil];
UINavigationController *paymentsNVC = [[UINavigationController alloc] initWithRootViewController: paymentsVC];
paymentsNVC.navigationBar.barStyle = UIBarStyleBlack;
[controllers addObject:paymentsNVC];
[paymentsNVC release];  

tabBarController.viewControllers = controllers;
tabBarController.selectedIndex = 0; 
tabBarController.delegate = self;

self.view = tabBarController.view;

WindowManager,你可以有两种方法,如,

[WindowManager showViewController] and
[WindowManager showTabbarController].

- showViewController {
  //Initiate View controller and use [self.window addSubView:vc.view];
}

- showTabbarController {
  // initiate the tabbar manager
}

您可以在您的第一个标签栏控制器左侧顶部有一个“返回”按钮,以调用

[WindowManager showViewController];

【讨论】:

  • Hey karim thaks for your answer 我试过这种方式,但是当我想弹出到主屏幕时出现问题,它没有弹出。首先我用导航控制器拿了 homeviewcontroller,然后我将它推到标签栏视图,但是当我单击标签栏上的后退按钮时,它不会弹出到主视图。你知道如何弹出到主视图然后。我尝试调用 [self.navigationcontroller poptoviewcontroller:是的];和 [self.navigationcontroller.tabbarcontroller poptoviewcontroller:YES];还有
  • 在导航堆栈中包含标签栏控制器是不受欢迎和不鼓励的。我已经更详细地编辑了答案以做同样的事情。
  • 是的,我知道这不是好方法,然后堆栈组织就不好了。但是我可以用那种方式做客户想要的。我告诉 T.L.它不能以这种方式完成,它需要基于标签或基于导航。
  • 很好,我会试试这个...........你说的窗口管理器类是什么意思是应用程序委托类,或者我可以为此采取任何视图控制器类
  • @Karim 谢谢它对我有用。我试了一下。但我认为这会在内存管理中产生问题,因为堆栈将继续增加。所以我将使用自定义每个标签栏视图的主视图,我每次都会在后退按钮上调用。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多