我有一个经典的主从逻辑并尝试在单击事件中使用 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-推荐答案 strong>
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/
|