gpt4 book ai didi

iphone - 我是否以编程方式在 ViewDidAppear、ViewDidLoad、ViewWillAppear、构造函数中添加 subview ?

转载 作者:行者123 更新时间:2023-12-03 18:17:04 26 4
gpt4 key购买 nike

我试图从Apple的sketchy中找出答案文档哪种方法是初始化 View 控件并将其添加到 Controller View 的最佳位置。

对于 winforms,这相当简单,因为它们总是在 InitializeDesigner 内初始化,并在构造函数中调用。如果可能的话,我正在尝试匹配此模式的可靠性。

大部分时间我都在 UINavigationController 中使用 UIViewControllersUITableViewControllers - 如果这会影响一切的话。

这是一个例子:

public MyController()
{
// Here?
AddViews();
}

public override ViewDidLoad()
{
base.ViewDidLoad();

// Or is should it be here?
AddViews();
}

public override ViewWillAppear(bool )
{
base.ViewWillAppear(animated);

// Here?
AddViews();
}

public override ViewDidAppear(bool animated)
{
base.ViewDidLoad(animated);

// Or maybe here?
AddViews();
}

void AddViews()
{
UILabel label = new UILabel();
label.Text = "Test";
label.Frame = new RectangleF(100,100,100,26);
View.AddSubView(label);

UIWebView webview = new UIWebView();
webview .Frame = new RectangleF(100,100,100,26);
View.AddSubView(webview);
}

当我将一些 UIControl 添加到不同位置的 View 时,我得到了混合结果。有时视觉滞后,有时 WebView 隐藏在某处。

添加它们是否有需要遵守的一般规则?

最佳答案

总的来说,这就是我所做的:

  • ViewDidLoad - 每当我向应与 View 一起出现的 View 添加控件时,我都会立即将其放入 ViewDidLoad 方法中。基本上,只要 View 加载到内存中,就会调用此方法。例如,如果我的 View 是一个带有 3 个标签的表单,我会在此处添加标签;如果没有这些表单, View 将永远不存在。

  • ViewWillAppear:我通常使用 ViewWillAppear 只是为了更新表单上的数据。因此,对于上面的示例,我将使用它来将数据从我的域实际加载到表单中。创建 UIView 的成本相当高,您应该尽可能避免在 ViewWillAppear 方法上执行此操作,因为当调用该方法时,这意味着 iPhone 已经准备好向用户显示 UIView,并且您在这里执行的任何繁重操作将以非常明显的方式影响性能(例如动画延迟等)。

  • ViewDidAppear:最后,我使用 ViewDidAppear 为需要很长时间才能执行的事情启动新线程,例如执行 Web 服务调用来获取额外的数据好的方面是,由于 View 已经存在并且正在向用户显示,因此您可以在获取数据时向用户显示一条漂亮的“等待”消息。

不过,您还可以使用其他技巧。假设您希望 UILabel 在加载表单后“飞”到表单中。在这种情况下,我会将标签添加到 ViewDidLoad 中的表单中,但框架位于 View 区域之外,然后在 ViewDidAppear 中我将执行动画以将其飞回 View 中。

希望有帮助。

关于iphone - 我是否以编程方式在 ViewDidAppear、ViewDidLoad、ViewWillAppear、构造函数中添加 subview ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2280423/

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