题 故事板uiviewcontroller,'自定义类'没有显示在下拉列表中


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

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

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


52
2018-01-02 22:22


起源




答案:


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


40
2018-01-04 00:26



这不适合我。我试过4.3.3和4.6.2在我早于4.2开发的项目中,现在失去了自定义类!机器设定??当我创建一个新项目时,我可以将工具栏按钮或项目添加到工具栏,然后无论如何它都会消失! - Joe
确保您的类是UIViewController的继承。 @interface ClassName:UIViewController - mikeborgh


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

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

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


35
2018-02-24 17:57





我会尝试以下方法:

  1. 检查实现该类的文件是否是该文件的一部分 建立阶段 (检查下 目标 > 建立阶段
  2. 添加 .m 归档到 建立阶段 (如果还没有)。
  3. 重启Xcode。

12
2018-01-02 22:51



是的,这是我检查的第一件事,它就在那里。事实上,当我手动在字段中键入类时,我的NSLog会在viewDidLoad中被调用。这真烦人 - 1dayitwillmake
哦,如果您手动输入班级名称,它是否正常工作? - tiguero
它可能只是来自XCode的错误。您是否尝试过其他一些自定义课程? - tiguero
如果有人关注:我遇到了问题并且可以确认@tiguero解决方法仍在iOS 9.0.1上运行。 - user3741598


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

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

  2. 保存故事板。

  3. 右键单击您的 My.storyboard 进入 项目导航器 面板再次,并选择 打开As-> Interface Builder - Storyboard 菜单选择。

自定义类条目现在将包含您的 MyController 班级名称。


9
2017-07-31 02:28





确保您的类继承自UIViewController。

@interface ClassName : UIViewController

6
2018-01-02 03:41





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

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

然而,该项目编译好了。

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

@interface KJBMainDataViewTrackConMk2<UIScrollViewDelegate> : UIViewController

这显然编译得很好。

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

@interface KJBMainDataViewTrackConMk2 : UIViewController<UIScrollViewDelegate>

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

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


3
2018-03-07 17:45





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

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

VS:

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

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

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


3
2018-01-02 00:00



这个!没有其他人解决了我的问题,这个问题。 - Can Poyrazoğlu


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


2
2017-07-09 07:06



仍然没有显示 - Hos Mercury


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


2
2018-05-05 04:06



将iOS应用程序扩展添加到iOS应用程序并创建时,我遇到了同样的问题 WKInterfaceController watch目标中的类与名称相同 UIViewController iOS目标中的类。 IB中的Class菜单没有显示监视类,如果它与iOS类同名。如果我手动输入类名,IB只会显示iOS类的出口。有没有办法从特定目标中指定一个类?我不得不在我的监视接口类的名称前加上前缀,我宁愿避免这种混乱。 - arlomedia
我需要重新审视这个问题。在Interface Builder中,有一个下拉列表可以选择类下拉列表下方的目标,但我需要进行实验,看看它是否有效。我不知道这个目标下拉列表是否是一个新功能。 - Chris Livdahl
谢谢,这个为我修好了! - Pete