gpt4 book ai didi

iOS:从 viewDidAppear 更改 View

转载 作者:行者123 更新时间:2023-11-29 02:28:45 25 4
gpt4 key购买 nike

我正在研究 View 生命周期,并且无法从不同 View 的负载更改 View 。

在我的 ViewController.h 中我有:

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

然而,这只会导致 View 位于 ViewController 和 ViewController2 之间(在循环中)出现动画。

我使用了 viewDidLoad 中的代码,但是两个 View 都没有加载(从阅读中您不能更改 View ,直到 viewWillAppear)

更新:当使用viewWillAppear中的代码时,会抛出whose view is not in the window hierarchy错误。

如何从 View 设置阶段更改 View ?

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

最佳答案

已编辑:

我不确定你到底想做什么,但假设你想要第一个 View Controller 出现,然后第二个 View Controller 立即在第一个 View Controller 之上制作动画,你应该能够使用几个来完成选项:

首先,您可以将调用包装在 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];
});

或者你可以使用一个 show modally segue:

- (void)viewDidLoad {
[super viewDidLoad];

dispatch_async(dispatch_get_main_queue(), ^{

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

或者您可以使用导航 Controller 并使用标准显示转场(正式推送)。这个不需要 dispatch_async:

- (void)viewDidLoad {
[super viewDidLoad];

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

我已经在以下位置发布了所有三个的工作示例:github

关于iOS:从 viewDidAppear 更改 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com