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