2010-11-01 34 views
20

我想创建几个自定义视图,可重用的UI组件,并且不希望在UIView子类中的代码中布置UI。我想为此使用一个xib。我自己使用了一个xib。我已经通过iteself使用了一个UIView子类。但我没有把它们一起使用。我如何将它们“附加”到彼此?我想使用IBOutlets在我的自定义视图中访问UILabels。如何一起使用xib和UIView子类?

这种事情会起作用吗?

NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil]; 
MyCustomView *view = [xib objectAtIndex:0]; 
view.myLabel.text = @"fred"; 
+2

请参阅http://stackoverflow.com/a/5056886/385619 – Willster 2012-03-09 12:39:26

回答

14

是的,这就是这样,它当你加载不在父母viewControllers

编辑xibs 2013年8月15日的工作原理:

你不能总是假设自己将会从返回的NSArray的索引0中得到你正在寻找的内容,这就是使用类型检查的好方法。

NSArray *xibArray = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:nil options:nil]; 
MyCustomView *myView = nil; 
for (id xibObject in xibArray) { 
//Loop through array, check for the object we're interested in. 
    if ([xibObject isKindOfClass:[MyCustomView class]]) { 
     //Use casting to cast (id) to (MyCustomView *) 
     myView = (MyCustomView *)xibObject; 
    } 
} 
+2

我确实按照我希望的方式工作。我创建了UIView子类,为我所拥有的两个UILabel添加了IBOutlets。在界面生成器中,我将视图类更改为我的UIView子类,并将我的两个标签上的引用插座设置为视图。 – Ron 2010-11-01 21:28:43

+0

我试图做同样的事情 - 你知道我应该用于(a)父UIControllerView和(b)自定义UIView本身?我已经注意到在我的代码中我有我的自定义UIView类名称,但是这给我一个递归调用我的自定义UIView初始化方法。这是我有(一)在父UIControllerView它使用我的自定义视图,在IB它的XIB我使用UIView,我已经设置类名为“clockview”,但(b)在我的实际clockview自定义UIView而不是UIControllerView)XIB文件我做了同样的事情,并将类名设置为“clockview”。 – Greg 2011-07-13 20:44:05

+0

这太费时了!任何其他技巧? – Krish 2012-07-27 11:14:04

相关问题