【问题标题】:Swift: programmatically load/connect to controls created in Interface BuilderSwift:以编程方式加载/连接到在 Interface Builder 中创建的控件
【发布时间】:2018-01-29 22:21:37
【问题描述】:

假设我有一个 OSX 应用程序,其中有一些精灵在四处移动,称它们为 gremlins。当我单击一个 gremlin 时,我想显示一些滑块来控制该 gremlin 的某些属性,可能是比例、速度、方向等,然后再次单击该 gremlin 以关闭滑块。然后单击另一个 gremlin 并显示滑块以控制其属性。我可以轻松地创建一些 NSSlider 并在代码中进行设置。但我更愿意在 Interface Builder 中创建一组滑块,并按需加载它们:如果我想重新排列它们并使用它们的相对位置,最好使用那个可视化界面来做,而不是让摆弄代码,重新编译,运行,点击一个小精灵,看看它的样子。另外,总的来说,它似乎是更好的设计——但我不知道,我是 Apple Land 的新手,还没有在这个环境中做任何专业的事情。

我已经尝试在“Swift:以编程方式加载/连接到在 Interface Builder 中创建的控件”上搜索我能想到的所有变体,但没有找到任何关于如何执行此操作的演示或讨论,甚至没有迹象表明任何人都这样做。这让我担心这不是 Apple Land 的工作方式。这可能吗?禁止/不必要的困难?是人们做的吗?如果可能的话,它叫什么,即,我可以通过 Google 搜索更多信息吗?

【问题讨论】:

  • 我从来没有做过这样的事情,但绝对可以做到。最坏的情况,一个视图控制器,中间有一个居中的视图(确实需要给它一个高度和宽度,但你可以稍后以编程方式调整它们)。具有 alpha 0 的外层和具有“清晰”背景颜色的居中层。然后将其呈现为 VC,而您的 UI 元素之外的任何触摸(通过委托)都可以 removeFromSuperview()。但是,我相信有一些方法可以使用“视图”,这会给您更大的控制力和灵活性,但这是您可以尝试的一种方法。
  • stackoverflow.com/questions/30335089/… 这可能是满足您需求的最佳方法
  • @AlexIoja-Yang 这正是我想要的,非常感谢。如果您愿意,请发布类似“这称为reusing a view xib”的答案,我会将其标记为已接受的答案。
  • @AlexIoja-Yang 哈哈,我的意思是把它作为正式答案发布,这样你就可以获得声望分了。
  • 它一直将它作为自己的评论发布。很高兴有帮助

标签: swift interface-builder


【解决方案1】:

尝试查看“重用视图 xib”。

这似乎是一个很好的起点:Example

  1. 创建 xib 文件
  2. 在 Interface Builder 中设计
  3. 创建自定义 UIView 文件并为视图创建初始化程序
  4. 将文件添加为 xib 的所有者(界面生成器)
  5. 将元素从 xib 连接到 Outlets
  6. 在 UIView 文件初始化器中加载 xib
  7. 将其分配给您创建的新 UIViews

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2010-10-14
    • 2013-12-26
    • 2010-09-25
    相关资源
    最近更新 更多