0

我有一个名为 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,并将它们添加到窗口层次结构中?

4

1 回答 1

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];
}
于 2013-05-15T07:10:21.903 回答