故事板uiviewcontroller,'自定义类'没有显示在下拉菜单中

时间:2013-01-02 22:23:00

标签: ios storyboard

我有一个在我的应用程序故事板中创建的UIViewController,以及我添加到项目中的自定义UIViewController子类(并且正好在我的目标的编译阶段)。但是,当我在Storyboard中的视图控制器上设置“自定义类”属性时,我的自定义类不会显示在列表中。

  • 检查该课程是我的应用目标的一部分,而不是测试'
  • 仔细检查它是否正确是UIViewController的子类
  • 编译程序只是为了确保xcode使用最新信息
  • 重新启动xcode

什么会导致我的班级没有出现在“自定义班级”下拉列表中?

26 个答案:

答案 0 :(得分:42)

我发现解决问题的两种方法,但它们是解决问题的方法。 1.只需在文本字段中键入视图控制器名称,或者2.关闭项目,然后重新打开它,在项目初始化中将文件放在列表中。

答案 1 :(得分:40)

如果您仍有问题,或者遇到同样问题的人:

确保在故事板上选择“ViewController”而不是“视图”(当您单击故事板中的视图时自动选择)。这两者之间的区别在于,当选择视图控制器时,应用程序周围会弹出一个蓝色矩形。要确保选择视图控制器,请打开文档大纲并直接在故事板层次结构中选择它。

enter image description here enter image description here enter image description here

答案 2 :(得分:12)

我会尝试以下方法:

  1. 检查实施该类的文件是构建阶段的一部分(在目标> 构建阶段下检查)
  2. .m文件添加到构建阶段(如果尚未添加)。
  3. 重启Xcode。

答案 3 :(得分:11)

您可以通过编辑故事板的XML来解决此问题。

  1. 右键单击 Project Navigator 面板中的My.storyboard条目,然后选择 Open As-> SourceCode 菜单选项。在XML中查找视图控制器条目,并添加属性customClass="MyController"

  2. 保存故事板。

  3. 再次右键单击 Project Navigator 面板中的My.storyboard条目,然后选择 Open As-> Interface Builder - Storyboard 菜单选择。

  4. 自定义类条目现在将包含您的MyController类名。

答案 4 :(得分:6)

确保您的类继承自UIViewController。

@interface ClassName : UIViewController

答案 5 :(得分:3)

在Xcode 8中,我的一些类的文件位置指定了错误的路径(区分大小写)。

MyProject/mysubdirectory/MyViewController.xib (.m, .h)

vs:

MyProject/MySubdirectory/MyViewController.xib (.m, .h)

真的不确定它是如何在该状态下结束的,但是我的项目表现出与上面完全相同的行为(没有在IB中显示的出口/动作),并且修复该路径解决了问题。

我修复了这两种不同的方式。一种方法是我打开.pbxproj文件并手动修复区分大小写的问题。另一种方法是通过点击文件的“文件检查器”选项卡的“标识和类型”部分下的文件夹图标,然后在那里重新选择文件。

答案 6 :(得分:3)

我遇到了与此问题中描述的问题相同的问题。但是,没有一个建议的答案为我修复了它。我的项目在没有警告或错误的情况下编译好,但是在.h文件中没有“出口”指示符来指示我的插座已链接到故事板元素。

此外,尝试在我的代码中创建新的插件,通过右键单击并拖动到我的头文件中,并未将我的标头源识别为此操作的潜在目标。此外,我的类没有出现在ViewController的属性检查器面板的Custom-Class下拉列表中。

然而,该项目编译好了。

仔细检查表明我已按以下方式定义了自己的课程......

@interface KJBMainDataViewTrackConMk2<UIScrollViewDelegate> : UIViewController

显然编译得很好。

但是,如果将其更改为以下内容,(将协议移至最后)...

@interface KJBMainDataViewTrackConMk2 : UIViewController<UIScrollViewDelegate>

然后一切都栩栩如生。所有出口突然表示与故事板元素“连接”。右键单击拖动再次开始工作,我的自定义类出现在故事​​板ViewController的属性检查器面板的自定义类下拉列表中!

这里的其他答案可能代表了这种情况的最可能原因,但是,我觉得至少值得一提的是这另外一个可能的原因。

答案 7 :(得分:2)

在我的情况下,我将一个新的TableViewController对象拖到故事板上,但是我添加了一个新文件,其子类是&#34; UIViewController&#34; ....然后,我添加一个文件&# 39; s子类是&#34; UITableViewController&#34;,问题解决了!!

答案 8 :(得分:2)

我遇到了同样的问题,但其他解决方案都没有对我有用。对我来说问题是我有一个Mac和iOS目标,都有自己版本的相同视图控制器。例如,我有一个名为FooViewController for Mac的.h / .m文件对和另一个名为FooViewController for iOS的.h / .m文件对。每对都适当地包含在各自的目标中,但由于某些原因Xcode不喜欢它,我的视图控制器不会出现在故事​​板中视图控制器的自定义类下拉列表中。我最终在iOS视图控制器中重命名了我的类,它立即显示在下拉列表中。

答案 9 :(得分:2)

单击故事板中的其他视图控制器,然后单击其自定义类下拉列表以确认列出了新类,但不选择它。单击您所创建的新视图控制器,您应该会在其自定义类下拉菜单中看到它。奇怪,嗯?我认为只是强迫刷新。

答案 10 :(得分:1)

我碰巧遇到了这个问题,在尝试了之前的建议后没有运气。最后我发现原因是头文件的类型设置为C++ header。将其更改为C header(与所有其他头文件一样)后,该类将显示在下拉列表中。不知道为什么......虽然可能对其他人有帮助,所以我在这里发布。

答案 11 :(得分:1)

对于那些在尝试了所有方法后仍然遇到此问题的人,可能是因为您单击了View而不是ViewController

单击ViewController时必须选择文件。

这解决了我的问题。

enter image description here

答案 12 :(得分:0)

对于macOS项目,创建一个新类会生成一个继承自NSObject的类,而不是在NSViewController上。

更改
import Cocoa

class AppsViewController: NSObject {

}

import Cocoa

class AppsViewController: NSViewController {

}

答案 13 :(得分:0)

我对这个问题感到非常沮丧,因为以上答案都无法解决我的问题。

在我的情况下:我正在研究swift视图控制器文件,并且正在进行主动更改(例如创建自定义集合单元类)。我还没有完成代码块,就这样打开它:

class tableViewCell: UITableViewCell { 
}
class collectionCell: 


class viewController: UIViewController {
     override func viewDidLoad(){
     super.viewDidload()

     }

}

请注意不完整的代码块“ collectionCell2” 这足以使xcode无法像这样识别我的viewController文件。 完成此块后,该文件将作为选项重新出现在我的xcode中。

非常愚蠢和简单。

答案 14 :(得分:0)

尝试清理项目,并重新启动Mac。我做的一件奇怪的事情是更改所有自定义类名称并再次构建项目。它奏效了!

答案 15 :(得分:0)

确保视图控制器与情节提要中的相同Type匹配。

答案 16 :(得分:0)

在我的情况下,swift 文件名与 swift 类名不同,即

文件名为 ViewControllerTest.swift 和类名是 ViewController.swift

将两者都更改为通用名称后解决了我的问题

以上修改后重启Xcode

答案 17 :(得分:0)

对我有用的是,单击Project Navigator中的文件,然后在“位置”下拉框下方的“身份和类型”下的文件检查器中,单击小文件夹图标,然后选择文件弹出窗口。

答案 18 :(得分:0)

我不得不重启XCode 7.3(7D175)

答案 19 :(得分:0)

在我的情况下,我选择了错误的UI ..所以我删除了类文件并创建了一个新文件并选择了正确的父类

答案 20 :(得分:0)

对于我的情况,不知何故捆绑资源被删除了,所以我加回来工作了!

构建阶段 - &gt;添加构建阶段 - &gt;复制捆绑资源 找到你的文件 然后将文件拖放到那里

然后确保检查目标成员资格。

答案 21 :(得分:0)

Storyboard正在寻找自定义类,但物理上它没有,它没有在列表中显示自定义类名,也没有显示出口。以下解决方案对我来说非常有效。

  1. 只需将代码复制到其他地方。(让我们说在桌面上)
  2. 打开现有代码。
  3. 删除自定义类文件。(移至废纸篓)
  4. 现在从复制的项目文件夹(从桌面)添加文件
  5. 不要忘记选中“如果需要复制”复选框
  6. 打开故事板和宾果游戏,您将获得下拉列表中的自定义类文件

答案 22 :(得分:0)

确保选择要附加班级的View Controller。简单的方法是打开Document Outline并选择你的视图控制器(当你在故事板上点击它时,有时它根本就不会选择你想要的对象)。

答案 23 :(得分:0)

以上(或以下:)都没有帮助我。虽然我发现了

  1. 将新的viewcontroller添加到storyboard后(只需将其拖入)
  2. 并按File \ New \ File \ Objective-C Class添加我的类,给它命名,没有XIB,下一步,创建
  3. 如果我在故事板中选择我的viewcontroller并尝试将我的课程分配给它 - 我的班级不在那里

    BUT

    如果我点击viewcontroller本身的视图,然后点击Custom Class中的类下拉菜单

    然后

    选择viewcontroller(单击viewcontroller下面的一个栏),然后再次单击Custom Class中的一个类下拉列表,我新添加的类会神奇地显示出来。

    很奇怪,一定是一个令人耳目一新的bug。 Xcode版本5.1(5B130a)

答案 24 :(得分:0)

确保最初不将CustomViewController添加到任何组或文件夹。将它放在应用的根目录中。

答案 25 :(得分:-1)

确保ViewController的类名是您想要的名称。即

class MyCustomNameViewController: UIViewController {
.
.
} 

仅更改文件名是不够的。