OStack程序员社区-中国程序员成长平台

标题: c# - InstantiateViewController 调用 ViewDidLoad [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 20:32
标题: c# - InstantiateViewController 调用 ViewDidLoad

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

这是我的代码,

MasterViewController.cs

detailButton += delegate {
   UIStoryboard Storyboard = UIStoryboard.FromName ("Main", null);
   Console.WriteLine("InstantiateViewController() started");
   var profileController = Storyboard.InstantiateViewController("rofileController") 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加载数据?

谢谢。



Best Answer-推荐答案


VoewDidLoadcalled ViewController 加载到内存时。

因此,获取数据的正确位置是 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4