gpt4 book ai didi

iphone - 是什么导致 UIViewController 变得活跃?

转载 作者:行者123 更新时间:2023-12-03 21:23:43 25 4
gpt4 key购买 nike

我确信这是一个简单的问题,但我已经忘记这个问题有一段时间了。

假设我有一个 UIViewController,它要么定义为 XIB 中的根,要么定义为堆栈上的根。在我的代码中的某个时刻,我想用另一个 View Controller 替换它。只需直接更换即可。我该怎么做?

我尝试过定义 Controller 并分配,但不确定在没有导航 Controller 的情况下实际上是什么让它推到屏幕上。

最佳答案

我认为当你说你想要替换 View Controller 时,你实际上的意思是你想要替换 View 。请记住, View Controller 不可见,但每个 View Controller 都映射到一个 View ,该 View 可以通过添加为可见 View 的 subview 而变得可见。

用新 View Controller 的 View 替换 self.view 的解决方案可能适用于您的特定情况,但这可能不是您问题的“正确”答案。在某些情况下,此解决方案对您不起作用。

假设您有一个基于简单 View 的应用程序,没有导航 Controller ,也没有选项卡栏 Controller 。在您的应用程序委托(delegate)中,您构建 YourFirstViewController 的实例,然后调用 [window addSubview:yourFirstController];。您的 View 层次结构现在由一个 UIWindow 和一个 subview (YourFirstViewController 的 View )组成。

现在假设用户按下该 View 上的按钮,该按钮由 YourFirstViewController 中定义的 IBAction 处理。您希望通过将 YourFirstViewController 的 View “替换”为与 YourSecondViewController 关联的 View 来做出响应。我将“替换”放在引号中,因为我们更常见的方式是通过将 View Controller 推送到导航堆栈上来呈现 View ,或者调用presentModalViewController:animated: 以模态方式呈现 View ,但我们假设您出于某种原因拒绝了这些选项,并且您实际上确实想要手动将 YourFirstViewController 的 View 替换为 YourSecondViewController 的 View 。

这是一个操作 View 层次结构的简单问题。您想要从其 super View (本例中为 UIWindow)中删除 YourFirstViewController 的 View ,并且想要添加 YourSecondViewController 的 View 作为 subview 来替换它。因此,您的操作将如下所示:

- (IBAction)replaceButtonClicked {
UIView *mySuperview = self.view.superview;
YourSecondViewController *secondController = [[YourSecondViewController alloc] init];
[mySuperview addSubview:secondController.view];
[self.view removeFromSuperview];
[secondController release];
}

当我们使用像 -pushViewController:animated: 或 -presentModalViewController 这样的方法时,接收 Controller 会为我们操纵 View 层次结构。这可能会让我们看起来像是在屏幕上查看 View Controller ,但事实并非如此。我们只是看一个嵌套 View 的大层次结构,一直到顶部的 UIWindow。

关于iphone - 是什么导致 UIViewController 变得活跃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2498112/

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