[英]How do I associate a Storyboard UIViewController with my custom UIViewController class?
[英]Storyboard uiviewcontroller, 'custom class' not showing in drop down
我在我的应用程序故事板中创建了一个 UIViewController,以及一个我添加到项目中的自定义 UIViewController 子类(并且正确地处于我的目标的编译阶段)。 但是,当我在 Storyboard 的视图控制器上设置“自定义类”属性时,我的自定义类没有显示在列表中。
什么会导致我的班级不显示在“自定义班级”下拉列表中?
我发现有两种方法可以解决问题,但它们是变通方法。 1. 只需在文本字段中输入视图控制器名称,或者 2. 关闭项目然后重新打开它,并在项目初始化中将文件放在列表中。
如果您仍然有问题或对于那些可能有同样问题的人:
确保在情节提要上选择“ViewController”而不是“视图”(单击情节提要中的视图时会自动选择)。 The difference between those two is that when the view controller is selected, a blue rectangle pop up around your app. 要确保选择视图控制器,请打开文档大纲并直接在故事板层次结构中选择它。
我会尝试以下方法:
.m
文件以构建阶段(如果还没有)。您可以通过编辑 Storyboard 的 XML 来解决此问题。
在Project Navigator面板中右键单击My.storyboard
条目并选择Open As->SourceCode菜单选项。 在 XML 中找到您的视图控制器条目,并添加属性customClass="MyController"
。
保存故事板。
再次在Project Navigator面板中右键单击My.storyboard
条目,然后选择Open As->Interface Builder - Storyboard菜单选项。
自定义类条目现在将包含您的MyController
类名。
确保您的类继承自 UIViewController。
@interface ClassName : UIViewController
在 Xcode 8 中,我的一些类为其文件位置指定了错误的路径(区分大小写)。
MyProject/mysubdirectory/MyViewController.xib (.m, .h)
对比:
MyProject/MySubdirectory/MyViewController.xib (.m, .h)
真的不确定它是如何最终处于那种状态的,但我的项目表现出与上述完全相同的行为(IB 中没有显示出口/动作),并且修复该路径解决了问题。
我修复了这两种不同的方式。 一种方法是我打开 .pbxproj 文件并手动修复区分大小写的问题。 另一种有效的方法是点击文件“文件检查器”选项卡的“身份和类型”部分下的文件夹图标,然后在那里重新选择文件。
单击故事板中的不同视图控制器,然后单击它的自定义类下拉列表以确认新类已列出,但不要选择它。 单击您创建的新视图控制器,您应该会看到它现在列在其自定义类下拉菜单中。 奇怪,嗯? 我认为只是强制刷新。
我遇到了与此问题中描述的相同的问题。 但是,没有一个建议的答案为我解决了这个问题。 我的项目编译正常,没有警告或错误,但是,在 .h 文件中没有“出口”指示符来表明我的出口已链接到故事板元素。
此外,尝试通过右键单击并拖动到我的头文件中来在我的代码中创建新的出口,并没有将我的头源识别为该操作的潜在目标。 此外,我的类没有出现在 ViewController 的属性检查器面板的自定义类下拉列表中。
然而,该项目编译正常。
仔细检查表明我已经以下列方式定义了我自己的类......
@interface KJBMainDataViewTrackConMk2<UIScrollViewDelegate> : UIViewController
这显然编译得很好。
但是,如果将其更改为以下内容,(将协议移到最后)...
@interface KJBMainDataViewTrackConMk2 : UIViewController<UIScrollViewDelegate>
然后一切都焕然一新。 所有出口突然被指示为与故事板元素“连接”。 然后右键拖动又开始工作了,我的自定义类出现在storyboard ViewController 的属性检查器面板的自定义类下拉列表中!
这里的其他答案可能代表了这种情况的最可能原因,但是,我觉得至少值得一提的是另一个潜在原因。
我遇到了同样的问题,但其他解决方案都不适合我。 对我来说,问题是我有一个 Mac 和 iOS 目标,两者都有自己的同一个视图控制器版本。 例如,我有一对 .h/.m 文件名为 FooViewController for Mac 和另一对 .h/.m 文件名为 FooViewController for iOS。 每对都正确地包含在各自的目标中,但由于某种原因 Xcode 不喜欢它,我的视图控制器不会显示在故事板视图控制器的自定义类下拉列表中。 我最终在 iOS 视图控制器中重命名了我的类,它立即出现在下拉列表中。
在我的例子中,我将一个新的 TableViewController 对象拖到故事板中,但是我添加了一个新文件,它的子类是“UIViewController”......然后,我添加了一个文件,它的子类是“UITableViewController”,问题解决了!!
我碰巧遇到了这个问题,在尝试了之前的建议后没有走运。 最后我发现原因是头文件的类型设置为C++ header
。 将其更改为C header
(与所有其他头文件一样)后,该类将出现在下拉列表中。 不知道为什么......可能对其他人有帮助,所以我把它贴在这里。
Storyboard 正在寻找自定义类,但实际上它不在那里,它没有在列表中显示自定义类名称,也没有显示插座。 以下解决方案对我来说非常有效。
确保最初没有将 CustomViewController 添加到任何组或文件夹。 将它放在您的应用程序的根目录中。
以上(或以下:)都没有帮助我。 虽然我发现
如果我在故事板中选择我的视图控制器并尝试将我的班级分配给它 - 我的班级不在那里
但
如果我单击视图控制器本身中的视图,然后单击自定义类中的类下拉菜单
接着
选择视图控制器(单击视图控制器下方的栏),现在再次单击自定义类中的类下拉列表,我新添加的类神奇地出现了。
奇怪,一定是刷新的bug。 Xcode 5.1 版 (5B130a)
确保选择要将类附加到的视图控制器。 简单的方法是打开Document Outline
并选择您的视图控制器(当您从故事板中点击它时,有时它根本不会选择您想要的对象)。
就我而言,不知何故捆绑资源被删除了,所以我重新添加并工作!
Build Phases -> Add Build Phase -> Copy Bundle Resources 找到你的文件然后把你的文件拖放到那里
然后确保检查您的目标成员资格。
就我而言,我选择了错误的 UI.. 所以我删除了类文件并创建了一个新的并选择了正确的父类
我不得不重新启动 XCode 7.3 (7D175)
对我有用的是,单击项目导航器中的文件,然后在“位置”下拉框下方的“身份和类型”下的文件检查器中,单击小文件夹图标,然后在弹出窗口中选择文件.
尝试清理您的项目,并重新启动您的 Mac。 我所做的一件特别的事情是更改所有自定义类名称并再次构建项目。 有效!
对于macOS
项目,创建一个新类会生成一个从NSObject
继承的类,而不是在NSViewController
。
更改自
import Cocoa
class AppsViewController: NSObject {
}
到
import Cocoa
class AppsViewController: NSViewController {
}
我对这个问题感到相当沮丧,因为上面的答案都没有解决我的问题。
就我而言:我正在处理 swift 视图控制器文件,并且正在进行主动更改(例如创建自定义集合单元类)。 我还没有完成代码块并让它像这样打开:
class tableViewCell: UITableViewCell {
}
class collectionCell:
class viewController: UIViewController {
override func viewDidLoad(){
super.viewDidload()
}
}
注意不完整的代码块 'collectionCell2' 这足以让 xcode 无法识别我的 viewController 文件。 完成此块后,该文件作为选项重新出现在我的 xcode 中。
非常愚蠢和简单。
确保视图控制器与故事板中的相同类型匹配。
在我的情况下,swift 文件名与 swift 类名不同,即
文件名是ViewControllerTest.swift和类名是ViewController.swift
将两者更改为通用名称后解决了我的问题
上述更改后重新启动Xcode
确保ViewController
的类名是您想要的名称。 IE
class MyCustomNameViewController: UIViewController {
.
.
}
仅更改文件名是不够的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.