我有一个经典的主从逻辑并尝试在单击事件中使用 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加载数据?
谢谢。
VoewDidLoad
是 called ViewController
加载到内存时。
因此,获取数据的正确位置是 ViewDidAppear
。
ViewDidAppear
通知 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 |