65

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

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

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

4

26 回答 26

46

我发现有两种方法可以解决问题,但它们是解决方法:-

  1. 只需在文本字段中输入视图控制器名称,或
  2. 关闭项目,然后重新打开它,并在项目初始化中将文件放在列表中。
于 2013-01-04T00:26:42.660 回答
45

如果您仍有问题或可能遇到相同问题的人:

确保在情节提要上选择“ViewController”而不是“视图”(单击情节提要中的视图时会自动选择该视图)。The difference between those two is that when the view controller is selected, a blue rectangle pop up around your app. 要确保选择视图控制器,请打开文档大纲并直接在情节提要层次结构中选择它。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

于 2014-02-24T17:57:32.570 回答
14

我会尝试以下方法:

  1. 检查实现类的文件是构建阶段的一部分(在target > build phase下检查)
  2. .m文件添加到构建阶段(如果还没有)。
  3. 重新启动 Xcode。
于 2013-01-02T22:51:15.067 回答
12

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

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

  2. 保存故事板。

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

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

于 2015-07-31T02:28:01.920 回答
6

确保你的类继承自 UIViewController。

@interface ClassName : UIViewController
于 2014-01-02T03:41:47.907 回答
5

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

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

与:

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

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

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

于 2017-01-02T00:00:18.380 回答
3

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

于 2014-07-09T07:06:33.957 回答
3

我遇到了与此问题中描述的相同的问题。但是,没有一个建议的答案为我解决了这个问题。我的项目编译正常,没有警告或错误,但是在 .h 文件中没有“插座”指示符表明我的插座已链接到情节提要元素。

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

然而,该项目编译成功。

仔细检查表明我已经以以下方式定义了我自己的类......

@interface KJBMainDataViewTrackConMk2<UIScrollViewDelegate> : UIViewController

这显然编译得很好。

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

@interface KJBMainDataViewTrackConMk2 : UIViewController<UIScrollViewDelegate>

然后一切都生机勃勃。所有出口都突然被指示为与情节提要元素“连接”。并且右键单击拖动再次开始工作,我的自定义类出现在情节提要 ViewController 的属性检查器面板的自定义类下拉列表中!

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

于 2016-03-07T17:45:07.767 回答
3

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

于 2016-05-05T04:06:09.733 回答
2

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

您必须在ViewController单击时选择文件。

这解决了我的问题。

在此处输入图像描述

于 2019-03-01T22:43:42.983 回答
2

就我而言,我将一个新的 TableViewController 对象拖到情节提要中,但我添加了一个新文件,其子类为“UIViewController”....然后,我添加了一个子类为“UITableViewController”的文件,问题解决了!!

于 2017-01-01T12:59:22.473 回答
1

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

于 2015-03-24T16:15:43.317 回答
1

Storyboard 正在寻找自定义类,但实际上它不存在,并且它没有在列表中显示自定义类名称,也没有显示 outlets 。以下解决方案非常适合我。

  1. 只需将您的代码复制到其他地方即可。(让我们在桌面上说)
  2. 打开您现有的代码。
  3. 删除自定义类文件。(移至垃圾箱)
  4. 现在从复制的项目文件夹中添加文件(从桌面)
  5. 不要忘记选中“如果需要则复制”复选框
  6. 打开故事板和宾果游戏,您将在下拉列表中获得自定义类文件
于 2015-09-08T12:21:01.547 回答
0

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

  1. 将新的视图控制器添加到情节提要后(只需将其拖入)
  2. 并通过 File\New\File\Objective-C 类添加我的类,给它一个名字,没有 XIB,下一步,创建

如果我在情节提要中选择我的视图控制器并尝试将我的班级分配给它 - 我的班级不在那里

如果我单击视图控制器本身中的视图,然后单击自定义类中的类下拉菜单

接着

选择视图控制器(单击视图控制器下方的栏),现在再次单击自定义类中的类下拉菜单,我新添加的类神奇地出现了。

奇怪,一定是刷新的bug。Xcode 版本 5.1 (5B130a)

于 2014-05-27T21:03:24.293 回答
0

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

于 2014-02-05T18:47:19.290 回答
0

确保选择要附加类的 View Controller。最简单的方法是打开Document Outline并选择您的视图控制器(当您从情节提要中点击它时,有时它根本不会选择您想要的对象)。

于 2014-11-30T14:33:02.583 回答
0

对于macOS项目,创建一个新类NSObject会生成一个继承自 on的类NSViewController

从改变

import Cocoa

class AppsViewController: NSObject {

}

import Cocoa

class AppsViewController: NSViewController {

}
于 2018-09-08T06:43:20.347 回答
0

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

于 2017-02-06T13:20:11.790 回答
0

确保视图控制器与 storyboard 中的相同类型匹配。

于 2020-06-23T20:30:49.553 回答
0

我对这个问题感到非常沮丧,因为上面的答案都没有解决我的问题。

在我的例子中:我正在处理 swift view controller 文件并且正在进行主动更改(例如创建自定义集合单元类)。我还没有完成代码块并像这样打开它:

class tableViewCell: UITableViewCell { 
}
class collectionCell: 


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

     }

}

注意不完整的代码块 'collectionCell2' 这足以让 xcode 无法识别我的 viewController 文件。一旦我完成了这个块,文件作为一个选项重新出现在我的 xcode 中。

非常愚蠢和简单。

于 2019-09-25T14:28:59.987 回答
0

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

于 2016-12-22T22:31:55.213 回答
0

就我而言,我选择了错误的 UI .. 所以我删除了类文件并创建了一个新文件并选择了正确的父类

于 2016-03-30T10:55:18.050 回答
0

就我而言,不知何故捆绑资源被删除了,所以我添加回来并开始工作!

Build Phases -> Add Build Phase -> Copy Bundle Resources 找到你的文件然后将你的文件拖放到那里

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

于 2015-12-12T00:27:12.947 回答
0

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

于 2016-06-13T11:24:31.563 回答
0

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

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

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

上述更改后重启 Xcode

于 2021-03-21T13:53:47.900 回答
-1

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

class MyCustomNameViewController: UIViewController {
.
.
} 

仅更改文件名是不够的。

于 2017-04-25T00:11:05.423 回答