视图不会被复制

时间:2016-07-28 20:48:43

标签: swift cocoa nsview nscoding

我有一个包含这样的对象的视图(绿色区域是我的视图): enter image description here

每当我按下“item”时,一个新的颜色对象被添加到这一行视图中,我希望“行”按钮按原样复制该行,并在按下时将其放在该行上方,所以我有两个(或多个行彼此叠加。我为行按钮做了这样的动作:

    let hc = contentView1
    hc?.setFrameOrigin(NSPoint(x: 0, y: (positionY*50)))
    positionY += 1

    contentView2?.addSubview(hc!)

但每次按下该按钮时,同一行只会移动而不会复制,如下所示:

enter image description here

我做错了什么?

2 个答案:

答案 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!)