IB - 无法为View Controller分配类

时间:2012-08-14 10:47:10

标签: iphone ios xcode uiviewcontroller interface-builder

我对IOS的发展很新,我在这里面临一个我以前没有遇到过的问题。这就是我所拥有的:

我创建了一个项目,添加了一些附加到自己类的ViewControllers。但现在,我刚在故事板中添加了一个新的ViewController。然后我创建了一个新的Objective-C类(带有UIViewController的子类)。问题是在IB中,我无法将ViewController链接到新创建的类,因为我根本没有IB提供的列表中的类(请参见下图)。我的新班级名为MapShownViewController,但正如您在图片上看到的那样,它不可用。

enter image description here

它适用于我所有其他课程,但不适用于此课程。

这是MapShownViewController.h:

#import <UIKit/UIKit.h>

@interface MapShownViewController : UIViewController

@end

MapShownViewController.m:

#import "MapShownViewController.h"

@interface MapShownViewController ()

@end

@implementation MapShownViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

有人可以解释一下我做错了吗?

9 个答案:

答案 0 :(得分:26)

我有这个确切的问题,它让我发疯了。我在从4.1升级XCode到4.4后首先注意到它。我有一个现有的项目,我一直在使用旧版本的XCode,我继续在4.4中进行工作。我完成了你所做的,并在故事板中创建了一个新的View,然后创建了子类文件,但是这个类在IB的Custom Class下拉列表中是不可用的。经过大量的谷歌搜索和挫折后,我采取了退出Xcode(完全退出,而不仅仅是关闭),然后重新启动它。然后好像通过魔术一起开始工作,新的课程在IB自定义课程下拉列表中可用。

答案 1 :(得分:16)

遇到同样的问题,重启XCode没有任何帮助。您始终可以右键单击故事板并选择Open As > Source Code。在XML文件中查找视图控制器元素,并添加customClass属性:

<viewController title="Login" id="TJH-Bg-q4u" customClass="XYZLoginViewController" sceneMemberID="viewController">
   ...
</viewController>

手动覆盖FTW:)。

答案 2 :(得分:4)

检查您的项目设置。 xcode-&gt; targets-&gt;构建阶段 - &gt;编译源代码 您的viewcontroller的实现文件必须添加到此列表中。

答案 3 :(得分:4)

为此,您必须确保以下内容:

1)添加到故事板的元素是 UIViewController

2)您定义的类具有 UIViewController 作为其超类

@interface MapShownViewController : UIViewController

3)正在项目中正确构建类。

答案 4 :(得分:1)

我一直在遇到这个问题,并尝试了此处发布的所有其他解决方案。

对我有用的是在创建自定义类之后设置正确的超类。然后你应该能够从课程下拉列表中找到并选择它。

e.g。

class LabsViewController: UITableViewController {

答案 5 :(得分:0)

检查您是否在新课程中选择了正确的超级课程。有时您创建一个由UITableVIewController继承的视图控制器。这个不能应用于Storyboard中的ViewController模式。

答案 6 :(得分:0)

我必须设置从UIViewController继承的自定义类,并作为UITableViewController的表视图控制器。我做了一个简单的技巧,只是将我的自定义类继承更改为&#34;:UITableViewController&#34;然后我可以自由地将这个类设置为控制器。当然,在设置之后我改变了继承。

答案 7 :(得分:0)

我在Mac OSX应用程序上遇到与Xcode 7.1.1相同的问题。我尝试了其他答案的所有建议 - 没有成功。

最后,我删除了我的视图控制器文件并创建了全新的视图 然后它突然起作用了......

答案 8 :(得分:0)

添加另一个可能的解决方案,帮助解决我的问题,因为其他人没有。

我注意到正在使用Command + Shift + O搜索我的自定义View Controller文件,但是我找不到文件在哪个文件夹中,所以我注意到由于某种原因我的自定义类丢失了该项目但仍在搜索中找到。

我所要做的就是将文件再次移动到项目中,然后再使用Voila!

希望这可以帮助将来的某个人。