2012-06-05 44 views
0

我遇到了一个问题,试图将视图控制器作为子视图加载到另一个视图控制器。将子视图添加到视图控制器

我所拥有的是一个导航控制器,它将一些viewControllers作为视图加载(弹出和推动等),完美地工作。那么我决定把一个tabBar放入一个viewController中,然后它使用一个switch语句来查看所有的选择内容,然后这个switch语句调用navigationController中出现的一个viewController中的一个方法。 这个viewController中的方法然后试图将另一个viewcontroller设置为navigator控制器内的viewcontroller的子视图。

这是我的代码。

TabBarViewController.m

#import "DetailViewController.h" 

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    switch (item.tag) { 
     case 0: 
     { 
      NSLog(@"item 1 selected"); 
      DetailViewController *dVC = [[DetailViewController alloc] init]; 
      [dVC tabBarSelectedAction]; 
     } 
      break; 
     default: 
      break; 
    } 

} 

所以这捕获标签栏上选择的项目...然后触发断MSG到DetailViewController方法来加载新的子视图到DetailViewController.view

- (void)tabBarSelectedAction 
{ 
    ButtonOneViewController *b1VC = [[ButtonOneViewController alloc] initWithNibName:@"ButtonOneViewController" bundle:[NSBundle mainBundle]]; 
    [self.testView addSubview:b1VC.view]; 

} 

这是我试图将子视图加载到屏幕上..我认为我做的是正确的,但由于某种原因,它不显示..我想要做的另一件事是动画这个视图从底部的屏幕上..

任何帮助将非常感激。

回答

0

当您创建新的DetailViewController时,您并未通过推送或呈现类型的方法使其成为视图层次结构的一部分。添加子视图可能会或可能不会工作,但您不会看到它,因为您要添加的对象不使用屏幕。

+0

哦right ..所以我不妨将这个新的子视图添加到导航控制器..这是视图层次结构的一部分吗? – HurkNburkS

0

你的方法应该看起来像这样。假设自己DetailViewController

- (void)tabBarSelectedAction { 

    ButtonOneViewController *b1VC = [[ButtonOneViewController alloc] initWithNibName:@"ButtonOneViewController" bundle:[NSBundle mainBundle]]; 
    [self presentModalViewController:b1VC animated:YES]; 

}

即使与

,我觉得你的逻辑有点搞砸了。您分配并初始化DetailViewController,但您从不在任何地方展示它。那么,如果您从不展示它,那么您如何期望在DetailViewController中看到模态视图。

编辑:考虑到它添加到UINavigationController你的评论,你会改变它看起来像这样..

[[self navigationController] presentModalViewController:b1VC animated:YES]; 

EDIT2:此外,你初始化类,只是为了调用已经是self的方法。您的-didSelectItem:方法应该看起来更像这样。

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 
switch (item.tag) { 
    case 0: 
    { 
     NSLog(@"item 1 selected"); 
     [self tabBarSelectedAction]; 
    } 
     break; 
    default: 
     break; 
    } 

} 
相关问题