【问题标题】:Unable to see custom classes in Interface Builder drop down无法在 Interface Builder 下拉菜单中看到自定义类
【发布时间】:2015-04-07 19:03:41
【问题描述】:

我使用的是 Xcode 6.1.1,无法从下拉列表中选择我的自定义类。因此,我认为它会导致其他几个相关问题(见下文)。

症状:

  • 使用 IB 下拉菜单选择自定义类时,不会出现任何自定义类。
  • IB_DESIGNABLEIBInspectable不起作用:在IB中选择控件时,不出现“Designable”状态;也没有出现任何可检查的属性。选择定义为IB_DESIGNABLE 的视图时,调试选定视图选项会灰显。
  • Ctrl 拖动项目以创建从 IB 到源代码的连接(IBOutlet 和 IBAction)有时不允许您将连接“拖放”到类的源代码中(就好像存在类不匹配一样)。 (注意:这假设您在“自定义类”部分手动输入了类名。)
  • 疑似相关:WatchKit: unable to find interface controller class

我该如何解决这个问题?

【问题讨论】:

    标签: xcode interface-builder


    【解决方案1】:

    行之有效的方法

    • 在另一台机器上尝试。 (这让我相信这台机器的某些设置搞砸了。)
    • 重新安装 Xcode。
    • 将项目移动到新位置(在本例中为 git 存储库),修复一次。

    我尝试过但不起作用(但对其他人有效)的方法:

    • 重启 Xcode
    • 重启机器(这之前工作过一次,这次不行)
    • 创建一个新的故事板。
    • 创建一个新的子类(不仅仅是重命名它)。
    • 通过 Apple 的单一视图模板创建一个新项目。
    • 清理项目
    • 删除派生数据
    • Reindex the project
    • 删除情节提要文件中的本地化。

    我尝试过的方法不起作用:

    • 根据 Apple 的约定命名子类(例如,使用 ABCTestView 代替 View)。
    • 在视图控制器的 .h 和 .m 中导入类的 .h。
    • 尝试使用另一个已安装的 Xcode 版本(测试版 6.2)。

    相关讨论:

    【讨论】:

    • 非常感谢您!这个问题在 Xcode 11.3.1 中仍然存在。我将我的项目从外部驱动器移动到 Mac 上的内部 SSD,现在它可以工作了。现在 Xcode 中有一些非常奇怪的错误。
    【解决方案2】:

    这不是你的具体情况,但我正处于类似的“扯掉我的头发”的时刻。在创建自定义控制器类和使用界面构建器时,您必须确保单击正在使用的视图顶部的黄色按钮(视图控制器按钮)。否则自定义 ViewController 类将不会显示在身份检查器的自定义类下拉菜单中。

    【讨论】:

      【解决方案3】:

      在莫名其妙地看到“Designables”行不会出现在 Identity Inspector 的自定义类部分中的问题后,一件对我有用的事情:

      之前(不起作用:Designables 没有出现,Interface Builder 没有渲染我的类):

      IB_DESIGNABLE
      
      @class MyCustomClass;
      
      @interface MyCustomView : UIView
      

      之后(功能:Designables 确实出现了,Interface Builder 确实渲染了我的类):

      @class MyCustomClass;
      
      IB_DESIGNABLE @interface MyCustomView : UIView
      

      看来Xcode对事物的顺序非常敏感。

      【讨论】:

        【解决方案4】:

        这对我有用:

        我不知何故丢失了 view 引用,所以我所做的只是从一个小圆圈“新引用出口”拖到 .xib 的主视图,然后 BOOM!

        【讨论】:

          【解决方案5】:

          以下是一些可能的解决方案:

          使用 IB 下拉菜单选择自定义类时,不会出现任何自定义类。

          手动输入自定义类的名称,而不是尝试在下拉列表中找到它。有时 IB 会在您键入时自动补全类的名称,特别是如果您遵循 Apple 的约定,即 YourView 作为 NSView 的子类。

          IB_DESIGNABLEIBInspectable不起作用:在IB中选择控件时,不出现“Designable”状态;也没有出现任何可检查的属性。选择定义为IB_DESIGNABLE 的视图时,Debug selected views 选项灰显。

          如果视图不是从 Object library 拖动或从 Editor > Embed In > ... 创建的自定义视图,则出于某种原因更改身份检查器中的自定义类 没有任何区别。要解决此问题,请右键单击 .xib 并选择 Open As > Source Code。搜索您要修复的视图(为您的视图提供一个在 IB 中易于识别的标签将使这更容易)。你会发现这样一个条目:

          <view ... customClass="YourView">
              ...
          </view>
          

          view 更改为customView,使条目类似于:

          <customView ... customClass="YourView">
              ...
          </customView>
          

          然后再次右键单击 .xib 并选择 Open As > Interface Builder XIB Document,您现在应该会在 Custom Class 下看到一个 Designables 条目strong> 在 IB 的身份检查器中,Debug Selected Views 将在 Editor 菜单下可用。

          Ctrl 拖动项目以创建从 IB 到源代码的连接(IBOutlet 和 IBAction)有时不允许您将连接“拖放”到类的源代码中(就好像存在类不匹配一样)。 (注意:这假设您在自定义类部分手动输入了类名。)

          听起来不像您的确切问题,但在双显示器/多显示器设置中,如果 IB 与源代码窗口位于不同的显示器上,请转到 Apple 菜单 > 系统偏好设置... > Mission Control 并取消选中 Displays have separate Spaces。这可能会产生一些视觉上的副作用(例如窗口阴影渗入其他显示器),但它会解决 ctrl 拖动到单独显示器上的问题。

          【讨论】:

          • 这样使用customView会导致Interface Builder无法打开文件。
          • 很抱歉听到这个消息,它在 XCode 6.3 和 6.4 中对我来说很好用。您确定将正确的 &lt;/view&gt; 更改为 &lt;/customView&gt; 吗?进行此更改后不应在 IB 中打开它的唯一原因是打开/关闭标记不匹配(意味着 IB 无法正确解析文件)。
          猜你喜欢
          • 1970-01-01
          • 2018-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-30
          • 1970-01-01
          • 2019-12-06
          相关资源
          最近更新 更多