- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当从代码启动 UIViewController 时,它需要运行的数据作为参数传递到 init 方法中并保存在非可选属性中,因此当 ViewDidLoad()
是您可以对数据和 View 执行任何您需要的操作。
执行 segue 时,属性被声明为隐式展开的可选值(因为 Storyboard需要没有额外参数的 init 方法才能对其进行初始化)。初始化后调用 loadView()
并设置 socket 。最后,prepareForSegue:sender:
被调用,其中数据被传递并设置在先前声明的属性中,所以当 ViewDidLoad()
被调用时,你可以做任何你想做的事需要数据和 View 。
使用UIStoryboard.instantiateViewController
时如何传递数据?据我了解, Storyboard 会自动调用 loadView()
并 以 viewDidLoad()
结束,而您没有机会将数据传递给您声明的自定义属性,因此该点数据尚未准备好使用。
(很明显,我可以在调用 UIStoryboard.instantiateViewController
后立即设置属性,但我认为此过程不保证在 viewDidLoad()
之前设置它们被称为)
例如,这(很可能)会起作用:
UIStoryboard.instantiateViewController
viewDidLoad()
被调用,在里面我可以使用数据和 View 对象。(因为我在之前给了那些属性值)但想象一下如果:
UIStoryboard.instantiateViewController
viewDidLoad()
被调用,我在里面使用自定义属性。该应用程序很可能会崩溃,因为未设置这些属性的值。 viewDidLoad()
已执行)最佳答案
viewDidLoad() is called regardless of whether the view hierarchy was loaded from a nib file or created programmatically in the loadView method.............You usually override this method to perform additional initialization on views that were loaded from nib files.
确实,viewDidLoad()
用于对 View 进行额外的初始化,因为当您初始化 View Controller 时(使用 -init 或 -initWithNibName:bundle:),它实际上并没有创建并初始化 View 。当您第一次调用 -view 时,它会调用 -loadView(我想这就是为什么 viewDidLoad()
是必需的,用于其他 初始化)。不过,UIViewController本身就是一个Class,我觉得给一个类Object设置属性并没有什么不妥。
我还查看了 UIStoryboard.instantiateViewController
的定义:
You use this method to create view controller objects that you want to manipulate and present programmatically in your application. Before you can use this method to retrieve a view controller, you must explicitly tag it with an appropriate identifier string in Interface Builder.
This method creates a new instance of the specified view controller each time you call it.
我强调 new instance
因为它不同于创建新的 viewController。通过使用 UIStoryboard.instantiateViewController
,您在 Storyboard中创建的所有 View 都将自动为您实例化,并且所有导出和操作都将按照您在 Storyboard中指定的方式进行设置。
正如 Apple Doc 所说的“在您的应用程序中以编程方式进行操作和呈现”,我认为您可以随意这样做。
关于swift - 使用 UIStoryboard.instantiateViewController 时,何时为 UIViewController 的自定义属性设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436065/
为什么我不能使用类似的方法创建 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 为了解
我是一名优秀的程序员,十分优秀!