将子视图添加到viewcontroller

时间:2012-06-05 22:21:15

标签: iphone ios uiviewcontroller uitabbarcontroller addsubview

我在尝试将viewcontroller作为子视图加载到另一个viewcontroller时出现问题。

我所拥有的是一个NavigationController,可以将一些viewControllers加载到视图中(pop和push等),并且完美运行。然后我决定将一个tabBar放入一个viewController,然后使用switch语句查看所有选择内容,然后这个switch语句调用一个在navigationController内部出现的viewControllers中的方法。 此viewController中的方法然后尝试将另一个viewcontroller设置为导航控制器内的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];

}

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

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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;
    }

}