我需要创建自己的UIView类,这不是我必须要做的事情。我创建了这个类,然后在IB中布置了一个小视图(这只是我稍后需要添加数据的几个标签)。但现在我坚持如何在我的主视图中实际放置它的实例。有人能指点我的好教程吗?我对此最接近的是创建自定义tableViewCell。
DataTagViewController.m:
- (id)initWithNibNamed:(NSString *)DataTagViewController bundle:bundle {
if ((self = [super initWithNibName:DataTagViewController bundle: bundle])) {
// Custom initialization
}
return self;
}
MapView.m:
DataTagViewController *dataTag = [[DataTagViewController alloc] initWithNibNamed:@"DataTagViewController" bundle:nil];
[theMap addSubView: dataTag.view]; <<< this line causes the crash (theMap is a UIView)
我现在在添加子视图时遇到此运行时错误: - [UIView addSubView:]:无法识别的选择器发送到实例0x470f070' 2010-06-06 21:22:08.931
答案 0 :(得分:1)
UIViewController不是视图,但控制视图。如果您的DataTagViewController类扩展了UIViewController,那么您将要添加它的视图,而不是类本身:
[theMap addSubView:dataTag.view];
另外,您是否创建了包含视图的DataTagViewController.xib文件?如果不这样做,则需要创建一个并使用UIViewController
的{{1}}方法。否则,您必须实现initWithNibName:bundle
方法,而不是通过代码提供自己的视图。
修改强>
您的init函数使用您的类的名称作为变量。那可能行不通。使用默认sigature:
loadView
如果您没有执行init函数之外的任何操作,则无需实现此方法。你的alloc / init语句就足够了。
要获得一个好的教程,请阅读文档中的View Controller Programming指南。
答案 1 :(得分:0)
DataTagViewController的父类是什么?你说你需要创建“我自己的UIView类”,但你的例子表明你实际上想要创建UIViewController子类。 initWithNibNamed:是UIViewController方法。如果你的父母是UIView,那么“无法识别的选择器”是有道理的。