在视图控制器内创建多个子视图

时间:2013-05-15 05:19:40

标签: objective-c

我有一个名为ViewController的视图控制器。

  • ViewController显示一个UIView,上面有一个按钮,允许我前进到第二个视图控制器 - SecondViewController。
  • SecondViewController上还有一个按钮,可以让我前进到第三个视图控制器。

但是,我在显示ThirdViewController时遇到问题。当我点击SecondViewController中的按钮时,它会抛出一个错误:

  

警告:尝试在...上显示...视图不在窗口层次结构中!

我去过很多其他网站和帖子来解决这个问题,但似乎找不到可行的解决方案。我已经实现了很多解决方案,但似乎都没有。

这是我的代码:

- (void)secondaryView:(UIView *)secondaryView
{
    UIView *theView = secondaryView;

    UIViewController *viewController = [[UIViewController alloc] init];
    viewController.view.frame = [UIScreen mainScreen].bounds;

    [viewController.view addSubview:theView];
    viewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentViewController:viewController animated:YES completion:nil];
}

secondaryView是我正在应用程序中的其他地方构建的UIView。我将它添加到viewController然后呈现viewController

有没有办法动态创建UIViewControllers,为每个添加UIView,并将它们添加到窗口层次结构中?

1 个答案:

答案 0 :(得分:1)

如果您可以在ViewControllers中使用导航,则可以尝试以下代码

在你调用firstViewController的地方,

   -(void)callFirst
    {
    FirstViewController *first = [FirstViewController alloc] init];
    UINavigationController *navigationController = [UINavigationController alloc] initWithRootViewController:first];
    navigationController.modalPresentaionStyle = UIModalPresenationFormSheet;
    [self presentModalViewController:navigationController animated:YES];
}

在FirstViewController按钮操作中,您可以编写

-(void)callSec
{
SecondViewController *sec = [SecondViewController alloc] init];
[self.NavigationController pushViewController:sec animated:YES];
}

在SecondViewController中你可以做同样的事情

  -(void)callThird
    {
        ThirdViewController *third = [ThirdViewController alloc] init];
        [self.NavigationController pushViewController:third animated:YES];

    }

试试这个......在这些ViewControllers中,你可以做任何想要满足要求的编码,比如

-(void)viewDidLoad
{
UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(20,20,400,400)];
newView.backGroundColor = [UIColor redColor];
[self.view addSubView:newView];
}