TabBarController NAvigationController和UIViewController

时间:2009-07-15 18:18:14

标签: objective-c iphone

我有下一个问题:

在我的项目中,我有下一个:

的UITabBarController

....一些UINAvigationControllers ....

*(1)UINavigationController

  UIViewController (UItableView) - When select one row it goes to...(by push) to:

              UIViewController (UItableView) - And here the same than before, for each row i open a new tableview....

我的问题是当我点击标签栏项目时,我看到了上次看到这个的viewController视图,并且没有重新加载到*(1)第一次查看另一次(就像我想的那样)

每次我在标签栏项目中点击时,我需要写的东西我重新加载此标签栏项目的第一个视图。

PD:我有电话:[theTableView reloadData];在方法“viewWillAppear”。

我正在做的事情是: 在我的导航控制器中,我有一个视图控制器(如tableview),当我单击一行时,在“didSelectRowAtIndexPath”方法中,我创建另一个调用“myController”的视图控制器,我按这样推送这个元素([[self navigationController] pushViewController :myController动画:是];) 这是每次我在下一个表格中单击一行时。

然后我认为问题不是重新加载方法viewWillAppear中的表视图,而是从屏幕上取出我插入到根目录的下一个视图控制器。

我很好吗?

IN RESUME:

我的应用程序有下一个:

  • 标签栏在屏幕之间移动
  • 在每个标签栏内导航(根据需要),为什么?因为所有tabBarItems都显示表格,如果你在一行中点击,则打开另一个表格,.....

我的问题是,当我点击标签栏时,我想回到第一主表。目前应用程序没有这样做,它继续在scree(表视图)中,这是此选项卡中的最后一次访问。 (不完全正确,因为如果我点击两次,是的,它会回来但不要输入“viewWillLoad”或“didSelectViewController”方法,因为我制作了NSLog并且它没有显示它们。)

草图可以是这样的:

AppDelegate - > WelcomeScreen - > VideosTableViewController - > RElatedVideosTableViewController - > ..... .......

第一件事是显示欢迎屏幕(不是那么重要,只有一些按钮),在这个类中,我使用“localViewControllersArray”初始化TabBArController,它是一个每个用一个ViewController初始化的NavigationControllers的NSMutableArray。

然后当我按下此欢迎屏幕中的一个按钮时,我会看到标签栏控制器(显示VideosTableViewController)

在下一步中,当我单击一行时,在“DidSelectRowAtIndexPath”中我创建了一个RElatedVideosTableViewController,我按“[[self navigationController] push ....:”相关视频表视图我创建“动画” :YES];

我也有:

添加:UITabBarControllerDelegate 添加:

  
      
  • (无效)tabBarController:(的UITabBarController *)tabBarController   didEndCustomizingViewControllers:   (NSArray的*)viewControllers   更改:(BOOL)已更改{}

  •   
  • (无效)tabBarController:(的UITabBarController *)tabBarController   didSelectViewController:(UIViewController的*)的viewController   {if([viewController   isKindOfClass:[UINavigationController的   类]])   {[(UINavigationController *)viewController popToRootViewController:NO];     [theTableView reloadData];     的NSLog(@ “RELOAD”);   }

  •   

在课程初始化时:         [super.tabBarController setDelegate:self];

但是在控制台中,我没有看到我正在制作的NSLog,而不是这种方法。

1 个答案:

答案 0 :(得分:1)

让您的应用在Interface Builder或代码中委派标签栏控制器的委托:

- (void)applicationDidFinishLaunching
{
    ...
    self.tabBarController.delegate = self;
}

然后,当标签栏切换到不同的视图时,您会收到通知,此时您会弹出所选导航控制器的根目录:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
      if ([viewController isKindOfClass:[UINavigationController class]])
      {
              [(UINavigationController *)viewController popToRootViewController:NO];
      }
}

每个视图控制器都应该有自己的表视图,所以我不知道你重新加载的目的是什么。