gpt4 book ai didi

c# - InstantiateViewController 调用 ViewDidLoad

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:30:50 26 4
gpt4 key购买 nike

我有一个经典的主从逻辑,并尝试在点击事件中使用 InstantiateViewController 创建细节 UIViewController 的实例。

这是我的代码,

MasterViewController.cs

detailButton += delegate {
UIStoryboard Storyboard = UIStoryboard.FromName ("Main", null);
Console.WriteLine("InstantiateViewController() started");
var profileController = Storyboard.InstantiateViewController("ProfileController") as ProfileController;
Console.WriteLine("InstantiateViewController() ended");
profileController.Id = 5;
};

ProfileViewController.cs

public partial class ProfileController : UIViewController
{
public int Id { get; set; }
public override void ViewDidLoad()
{
Console.WriteLine("ViewDidLoad() called");
}
}

当我点击按钮输出时,

InstantiateViewController() started
ViewDidLoad() called
InstantiateViewController() ended

这意味着 profileController.Id 设置在 ViewDidLoad() 之后,这意味着我无法在 ViewDidload 事件中通过 Id 加载数据,因为 Id 为空。

所以我的问题是为什么ViewDidLoad()被InstantiateViewController()调用,我应该在哪个方法中通过Id加载数据?

谢谢。

最佳答案

VoewDidLoadcalledViewController 加载到内存中时。

因此,获取数据的正确位置是 ViewDidAppearViewDidAppear 通知 ViewController 它的 View 已添加到 View 层次结构中。

更新:

根据评论中提供的新信息,您可以执行以下操作:

public partial class ProfileController : UIViewController
{
private int _id;

public void SetupProfile (int id)
{
// Save the Id if necessary.
_id = id;
// Add event with this id related.
}
public override void ViewDidLoad()
{
Console.WriteLine("ViewDidLoad() called");
}
}

或者,如果您仍然想在 ViewDidAppear 中进行事件设置,您可以对事件使用这种方法:

yourClass.Event -= MyHandler;
yourClass.Event += MyHandler;

关于c# - InstantiateViewController 调用 ViewDidLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779245/

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