繁体   English   中英

Storyboard uiviewcontroller,“自定义类”未显示在下拉列表中

[英]Storyboard uiviewcontroller, 'custom class' not showing in drop down

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

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

什么会导致我的班级不显示在“自定义班级”下拉列表中?

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

如果您仍然有问题或对于那些可能有同样问题的人:

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

在此处输入图片说明在此处输入图片说明在此处输入图片说明

我会尝试以下方法:

  1. 检查实现类的文件是否是构建阶段的一部分(在target > build phase下检查)
  2. 添加.m文件以构建阶段(如果还没有)。
  3. 重新启动Xcode。

您可以通过编辑 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类名。

确保您的类继承自 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 正在寻找自定义类,但实际上它不在那里,它没有在列表中显示自定义类名称,也没有显示插座。 以下解决方案对我来说非常有效。

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

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

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

这解决了我的问题。

在此处输入图片说明

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

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

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

如果我在故事板中选择我的视图控制器并尝试将我的班级分配给它 - 我的班级不在那里

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

接着

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

奇怪,一定是刷新的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM