0

我在尝试将视图控制器作为子视图加载到另一个视图控制器时遇到问题。

我所拥有的是一个 NavigationController,它将一些 viewControllers 作为视图(pop 和 push 等)加载,效果很好。然后我决定将 tabBar 放入 viewController 中,然后使用 switch 语句查看所有选择内容,然后此 switch 语句调用出现在 navigationController 中的 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;
    }

}

所以这会捕获选项卡栏上的选定项目...然后向 DetailViewController 方法触发一条消息以将新的子视图加载到 DetailViewController.view

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

}

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

任何帮助将不胜感激。

4

2 回答 2

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;
    }

}
于 2012-06-05T22:41:21.803 回答
0

当您创建新的时DetailViewController,您没有通过 push 或 present 类型的方法使其成为视图层次结构的一部分。添加子视图可能有效,也可能无效,但您不会看到它,因为您添加它的对象没有使用屏幕。

于 2012-06-05T22:27:10.057 回答