Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.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 是否可以复制UILabel,以便将其作为子视图添加到多个UIView?_Iphone - Fatal编程技术网

Iphone 是否可以复制UILabel,以便将其作为子视图添加到多个UIView?

Iphone 是否可以复制UILabel,以便将其作为子视图添加到多个UIView?,iphone,Iphone,我知道一个视图只能是一个superview的子视图,因此是否可以复制UILabel,这样我就不必复制设置代码或编写函数来创建它?不,UILabel类不实现NSCopying协议。如果您想将同一视图添加到所有视图中,那么将自定义视图子类化可能是最好的方法。该方法可用于任何继承的视图,因此我的第一个调用端口将只是尝试 UILabel *second = [first copy]; 但是,这可能无法像预期的那样100%工作,某些UILabel属性可能无法按照您的意愿进行复制。如果没有,您可以尝试使用

我知道一个视图只能是一个superview的子视图,因此是否可以复制UILabel,这样我就不必复制设置代码或编写函数来创建它?

不,UILabel类不实现NSCopying协议。如果您想将同一视图添加到所有视图中,那么将自定义视图子类化可能是最好的方法。

该方法可用于任何继承的视图,因此我的第一个调用端口将只是尝试

UILabel *second = [first copy];
但是,这可能无法像预期的那样100%工作,某些UILabel属性可能无法按照您的意愿进行复制。如果没有,您可以尝试使用方法-编码对象,然后将其解码为新对象

不过,手工操作可能更容易;)


Sam

正如@starkhalo所说,
UILabel
不符合
NSCopying
。因此,不能将复制方法与UILabel一起使用

用于
NSObject
的Iphone文档清楚地表明-


NSObject
本身不支持
NSCopying
协议。子类必须支持该协议并实现
copyWithZone:
方法。

您可以仅为该标签设置单独的XIB,并调用
[[NSBundle mainBundle]loadNibNamed:@“LabelNib”所有者:自选项:nil]将该nib的文件所有者设置为您的委托类,并建立正确的连接。现在,您可以根据需要多次将标签添加到视图中,并修改每个标签(例如,使用for循环)。

如上所述,这不起作用。您将得到如下错误:
'NSInvalidArgumentException',原因:'-[UILabel copyWithZone:]:发送到实例0x7b959d0的选择器无法识别。
是的,很多对象都会这样做,这真的很烦人:(我对OP的下一个建议是创建实现NSCopying并生成新UILabel:)不幸的是,在此之前,有人提供了一个不同的答案来解决这个问题:)