如何在 Xcode 中获取 UI 对象

Posted

技术标签:

【中文标题】如何在 Xcode 中获取 UI 对象【英文标题】:How to obtain UI object in Xcode 【发布时间】:2018-11-03 20:40:53 【问题描述】:

我想用配对的蓝牙设备列表填充UITableView,但我不确定如何获取视图对象以便填充它。在 android 下,每个 UI 元素都分配有一个资源 ID,用于获取特定 UI 元素的实例,但我不确定这在 ios 中是如何完成的。

在我的 ViewController 类中,我有这个:

@IBOutlet weak var btListView: UITableView!

我希望将此变量分配给我的主故事板上的 Tableview 实例,大概是在 viewDidLoad() 中。

此外,当我尝试通过在情节提要中右键单击它来为视图分配一个出口时,+ 选项在那里,但当我单击新建引用出口时没有任何反应。

【问题讨论】:

如果视图控制器是UITableViewController,那么与 self.tableView 的连接已经存在。如果您正在执行自定义UIViewController,那么您可以控制并从表格视图拖动到插座以建立连接。 我想说,即使只是回答这个问题也对你没有太大帮助。我建议更基础的并查找有关如何使用 Storyboards 的简单教程,@IBOutlets 和 UITableViews。 并不是说我们不能或不想提供帮助。我只是觉得你会比在这里来回学习更多并且做得更快。 显然使用 + 新插座在 XCode 中不起作用;控制拖动起到了作用,尽管我仍然看不到连接的位置并假设它在幕后。感谢您的帮助...ed 您需要查看您的视图控制器应该遵循的UITableViewDataSource 方法。特别是在 tableView(_:, cellForRowAt:) 创建单元格的地方,您可以在其中设置它以显示给定索引路径的内容,您可以使用它来获取它所代表的数据。 【参考方案1】:

我希望将此变量分配给我的主故事板上的 Tableview 实例,大概是在 viewDidLoad() 中。

您无需在代码中执行任何操作。只需将表格视图连接到您的故事板中的btListView 出口,您会发现当viewDidLoad() 执行时,btListView 已经引用了表格。这确实是插座的好处……您在设计界面时将它们连接起来,并且当情节提要场景中的对象被加载时,该连接会为您重新创建。

要在情节提要中建立联系,请在情节提要中找到相关场景并查看其中的对象列表。您的视图控制器应该在其中,您可以通过控制单击视图控制器来检查其出口列表。会弹出一个列表,你可以从btListView出口右侧的小圆圈拖动到表格,也可以从表格控制拖动到视图控制器,然后选择btListView出口弹出来。

【讨论】:

有效。我还对 XCode、Swift 或核心库在何处/如何实际将 UI 元素与 Swift 出口变量相关联感兴趣。我能说的最好的就是项目文件系统中某处的 .xib 文件中有代码 不,.xib 中没有代码。非常简单地说,.xib 或 storyboard 场景中的对象都是符合 NSCoding 的类的实例,因此 .xib/storyboard 编辑器本质上是序列化对象图。当您调用 UIStoryboard 的 init(name:bundle:) 方法或从 .xib 文件加载视图控制器时,对象被反序列化并恢复它们之间的关系。 有趣。关系存储在哪里? 在同一个文件中,以及其他所有内容。您可以使用文本编辑器打开情节提要,并根据需要查看它。对同一对象的多个引用由 NSKeyedArchiver/Unarchiver 处理。阅读有关这些类和 NSCoding 的文档——它是强大的东西,非常有用。 这就是我的想法,但故事板总是在 XCode 中以视觉形式打开。我现在可以使用文本编辑器查看链接。感谢您的指导。

以上是关于如何在 Xcode 中获取 UI 对象的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode UI 测试中是不是可以获取视图的方向

创建 UITextView 时,如何在实时视图中显示的 Swift Playgrounds(在 Xcode 上)的 UI 中隐藏键盘?

如何使用 Swift 在 XCode UI 自动化中选择随机表格视图单元格

如何在 Xcode 中运行单个 UI 测试

我如何在 Xcode 9 中录制(用于 UI 测试)

如何使用 Xcode 机器人在模拟器上运行 UIAutomation