Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何同时使用xib和UIView子类?_Iphone_Objective C_Cocoa Touch_Ios_Interface Builder - Fatal编程技术网

Iphone 如何同时使用xib和UIView子类?

Iphone 如何同时使用xib和UIView子类?,iphone,objective-c,cocoa-touch,ios,interface-builder,Iphone,Objective C,Cocoa Touch,Ios,Interface Builder,我想创建两个自定义视图,一种可重用的UI组件,并且不希望在UIView子类的代码中布局UI。我想用xib来做这个。我已经单独使用了xib。我自己使用了UIView子类。但我没有一起用过。我如何将它们彼此“连接”起来?我想使用IBOutlets访问自定义视图中的UILabel 这样行吗 NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil]; MyCustomView *

我想创建两个自定义视图,一种可重用的UI组件,并且不希望在UIView子类的代码中布局UI。我想用xib来做这个。我已经单独使用了xib。我自己使用了UIView子类。但我没有一起用过。我如何将它们彼此“连接”起来?我想使用IBOutlets访问自定义视图中的UILabel

这样行吗

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

是的,当您加载不是ViewController父级的XIB时,它就是这样工作的

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;
    }
}

我确实按照我想要的方式做了。我创建了UIView子类,为我拥有的两个UILabel添加了IBOutlets。在Interface Builder中,我将视图类更改为UIView子类,并将两个标签上的引用插座设置为视图。我正在尝试做同样的事情-您知道(a)父视图和(b)自定义UIView本身应该使用什么类名吗?我在我的代码中注意到,我的自定义UIView类名在这两个类名中都有,但这给了我对自定义UIView init方法的递归调用。也就是说,我(a)在使用我的自定义视图的父UIControllerView中,在IB中,因为它是XIB,我使用UIView,我已将类名设置为“clockview”,但是(b)在我实际的clockview自定义UIView(不是UIControllerView)XIB文件中,我做了同样的事情,并将类名设置为“clockview”。我不明白你的意思。在Interface Builder中创建UI布局、连接某些IBOutlet比手动设置CGRect FRAMESSE花费的时间更少