我有一个在我的应用程序故事板中创建的UIViewController,以及我添加到项目中的自定义UIViewController子类(并且正好在我的目标的编译阶段)。但是,当我在Storyboard中的视图控制器上设置“自定义类”属性时,我的自定义类不会显示在列表中。
什么会导致我的班级没有出现在“自定义班级”下拉列表中?
答案 0 :(得分:42)
我发现解决问题的两种方法,但它们是解决问题的方法。 1.只需在文本字段中键入视图控制器名称,或者2.关闭项目,然后重新打开它,在项目初始化中将文件放在列表中。
答案 1 :(得分:40)
如果您仍有问题,或者遇到同样问题的人:
确保在故事板上选择“ViewController”而不是“视图”(当您单击故事板中的视图时自动选择)。这两者之间的区别在于,当选择视图控制器时,应用程序周围会弹出一个蓝色矩形。要确保选择视图控制器,请打开文档大纲并直接在故事板层次结构中选择它。
答案 2 :(得分:12)
我会尝试以下方法:
.m
文件添加到构建阶段(如果尚未添加)。答案 3 :(得分:11)
您可以通过编辑故事板的XML来解决此问题。
右键单击 Project Navigator 面板中的My.storyboard
条目,然后选择 Open As-> SourceCode 菜单选项。在XML中查找视图控制器条目,并添加属性customClass="MyController"
。
保存故事板。
再次右键单击 Project Navigator 面板中的My.storyboard
条目,然后选择 Open As-> Interface Builder - Storyboard 菜单选择。
自定义类条目现在将包含您的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)
答案 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正在寻找自定义类,但物理上它没有,它没有在列表中显示自定义类名,也没有显示出口。以下解决方案对我来说非常有效。
答案 22 :(得分:0)
确保选择要附加班级的View Controller。简单的方法是打开Document Outline
并选择你的视图控制器(当你在故事板上点击它时,有时它根本就不会选择你想要的对象)。
答案 23 :(得分:0)
以上(或以下:)都没有帮助我。虽然我发现了
如果我在故事板中选择我的viewcontroller并尝试将我的课程分配给它 - 我的班级不在那里
BUT
如果我点击viewcontroller本身的视图,然后点击Custom Class中的类下拉菜单
然后
选择viewcontroller(单击viewcontroller下面的一个栏),然后再次单击Custom Class中的一个类下拉列表,我新添加的类会神奇地显示出来。
很奇怪,一定是一个令人耳目一新的bug。 Xcode版本5.1(5B130a)答案 24 :(得分:0)
确保最初不将CustomViewController添加到任何组或文件夹。将它放在应用的根目录中。
答案 25 :(得分:-1)
确保ViewController
的类名是您想要的名称。即
class MyCustomNameViewController: UIViewController {
.
.
}
仅更改文件名是不够的。