- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个经典的主从逻辑,并尝试在点击事件中使用 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加载数据?
谢谢。
最佳答案
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/
为什么我不能使用类似的方法创建 View Controller 对象resultVC = ResultViewController() 而不是下面的方式。 let storyboard
我有这段代码,但是我没有在第二个 View Controller 中接收数据...我在这里做错了什么? let storyboard = UIStoryboard(name: "Pos
我是ios开发新手,所以请原谅我的无知。我注意到,当我使用 UICollectionViewCell 时,我可以调用 dequeueReusableCell 来实例化或调用现有单元格。我想知道 Vie
我有一个经典的主从逻辑,并尝试在点击事件中使用 InstantiateViewController 创建细节 UIViewController 的实例。 这是我的代码, MasterViewContr
我的自定义导航栏中有一个菜单表格 View 。如果我单击一个单元格,它应该将我带到另一个 View Controller 。但是当我点击它时我的应用程序崩溃了。 func tableView(_ ta
我正在尝试做的事情: 我正在尝试按下导航栏右上角的 + 按钮,将应用推送到新 View (使用 navigationController.pushViewController),从新 View 获取一
swift 3.0 根据我在这里的发现,UIStoryboard 总是在函数 instantiateViewController(withIdentifier:) 中返回非可选实例。 open cla
segue 和 instantiateViewController 有什么区别? 我一直在尝试弄清楚如何使用 segues 将图像从一个 View Controller 发送到另一个 View Con
我正在使用 storyboard.instantiateViewController 来启动 TableViewController,但是当我尝试向下转换它时,出现错误: Could not cast
基本上我有五个 View Controller ,第一个是初始 View Controller 有两个文本字段,用户可以在其中输入值。之后,根据用户从两个选择器 View 中的选择,他/她将在点击“下
我已经创建了第二个带有 Storyboard的 View Controller 。我已经指定了一个 StoryBoard ID。我为这个 Controller 创建了一个类,并在 Storyboard
为什么我们需要在使用 UIStoryboard 的 instantiateViewController(withIdentifier:) 方法实例化 View Controller 之后使用关键字进行
我正在尝试为我的项目中的导航获取更多的通用解决方案,并且我一直想知道 segues 与手动实例化的 VC。 我在 atm 中的做法是,我在 Storyboard 中拥有从一个 View 到另一组 Vi
我希望有人能帮助我解决我遇到的这个问题。 我正在尝试将UIViewController数组添加到UIPageViewController。但是,每当我尝试通过方法 instantiateViewCon
我试图理解两个 View Controller 之间的通信。 在没有 segue 的情况下传递数据时,我看到了两种创建目标 Controller 实例的方法。 第一个是storyboard?.inst
从sb.instantiateViewController(withIdentifier:)创建一个vc10,不能使用它的属性甚至将它的类型转换为ViewController10 。 下面是我的代码:
当从代码启动 UIViewController 时,它需要运行的数据作为参数传递到 init 方法中并保存在非可选属性中,因此当 ViewDidLoad() 是您可以对数据和 View 执行任何您需要
我使用的是我的物理设备,而不是模拟器。 我正在使用 storyboard.instantiateViewController(withIdentifier:) 实例化一个 vc 并以模态方式呈现它。我
我正在处理 Xamarin IOS/monotouch 项目。一段时间以来我一直被这个错误所困。这些是代码行 var prfc = this.Storyboard.InstantiateViewCon
我收到这个错误 - InstantiateViewController(identifier:creator:)' is only available in iOS 13.0 or newer 为了解
我是一名优秀的程序员,十分优秀!