每当我按下“item”时,一个新的颜色对象被添加到这一行视图中,我希望“行”按钮按原样复制该行,并在按下时将其放在该行上方,所以我有两个(或多个行彼此叠加。我为行按钮做了这样的动作:
let hc = contentView1
hc?.setFrameOrigin(NSPoint(x: 0, y: (positionY*50)))
positionY += 1
contentView2?.addSubview(hc!)
但每次按下该按钮时,同一行只会移动而不会复制,如下所示:
我做错了什么?
答案 0 :(得分:0)
视图可以有一个超级视图,每次将视图添加到超级视图时,它都会从之前的超级视图中删除。 NSView
未实施NSCopying
协议,因此您无法通过调用copy
来复制视图。在SO中搜索“复制NSView”。
答案 1 :(得分:0)
看起来问题是您正在创建一个与要复制的视图相同的新视图。但是,NSView是引用类型,而不是值类型。因此编辑一个视图将编辑另一个视图。
NSView
幸运地实现了NSCoding
协议,因此您可以像这样复制视图:
let archivedView = NSKeyedArchiver.archivedDataWithRootObject(contentView1)
let hc = NSKeyedUnarchiver.unarchiveObjectWithData(archivedView)
然后做其余的事情:
hc?.setFrameOrigin(NSPoint(x: 0, y: (positionY*50)))
positionY += 1
contentView2?.addSubview(hc!)