繁体   English   中英

iOS:从viewDidAppear更改视图

[英]iOS: change view from viewDidAppear

我正在围绕视图生命周期进行操作,并且无法从其他视图的负载中更改视图。

在我的ViewController.hi中有:

-(void)viewDidAppear:(BOOL)animated{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    ViewController2 *viewController = (ViewController2 *)[storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];
    [self presentViewController:viewController animated:YES completion:nil];
}

但是,这只会导致视图介于ViewController和ViewController2之间,并带有动画(循环显示)。

我在viewDidLoad使用了代码,但是视图均未加载(从读取开始,直到viewWillAppear都无法更改视图)

更新:在viewWillAppear使用代码时, whose view is not in the window hierarchy将引发错误。

如何从视图设置阶段更改视图?

更新使用上述代码,在GCD内部和外部,在viewDidLoadviewWillAppearviewDidAppear要么导致ViewController2的动画显示无限循环,要么导致第二次segue尝试崩溃(从循环中得到)。

编辑:

我不确定您要做什么,但是假设您希望第一个ViewController出现,然后让第二个ViewController立即在第一个ViewController上进行动画处理,则应该可以使用以下几个选项来完成:

首先,您可以将调用包装在dispatch_async调用中:

dispatch_async(dispatch_get_main_queue(), ^{

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    ViewController2 *viewController = (ViewController2 *)[storyboard 
    instantiateViewControllerWithIdentifier:@"ViewController2"];

    [self presentViewController:viewController animated:YES completion:nil];
});

或者,您可以使用节目以模态方式进行搜索:

- (void)viewDidLoad {
  [super viewDidLoad];

  dispatch_async(dispatch_get_main_queue(), ^{

        [self performSegueWithIdentifier:@"myModalSegue" sender:self];
  });
}

或者,您可以使用导航控制器并使用标准的show segue(正式推送)。 此代码不需要dispatch_async:

- (void)viewDidLoad {
  [super viewDidLoad];

  [self performSegueWithIdentifier:@"myshowsegue" sender:self];
}

我已为所有三个工作例子上: github上

最好在loadView方法中交换视图。

- (void)loadView {
    CGRect rect = [[UIScreen mainScreen] applicationFrame];
    MyView *view = [[MyView alloc] initWithFrame:rect];
    [view setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
    self.view = view;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM