视图不会被复制

视图不会被复制

问题描述:

我有一个包含这样一些对象的视图(绿色区域是我的看法): enter image description here视图不会被复制

我每次按“项目”的新颜色对象被添加到该行我希望“行”按钮按照原样复制此行,并在按下时将其放置在此行的上方,因此我有两个(或多个)行在彼此之上。我做了一排按钮,这样的动作:

enter image description here

我是什么:我每次按下该按钮,在同一行只是移动,不复制,像这次

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

    contentView2?.addSubview(hc!) 

但做错了?

+0

您可以添加代码的项目按钮? – WMios

+0

嘿:)感谢编辑,但你把图像放在彼此的地方。 按钮有没有代码,它只是一个NSButton – omgtheykilledkenny

+0

我添加了我的Xcode项目,以便他们可以see.its现在消失了! – omgtheykilledkenny

视图可以有一个超级视图,并且每次将视图添加到超级视图时,它都会从其先前的超级视图中移除。 NSView未实施NSCopying协议,因此您无法通过调用copy来复制视图。搜索“复制NSView”。

看起来问题是您正在创建一个等于您想要复制的视图的新视图。但是,NSViews是引用类型,而不是值类型。所以编辑一个视图会编辑另一个视图。

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!) 
+0

'unarchiveObjectWithData'给出错误'使用未解决的标识符' – omgtheykilledkenny

+0

仔细检查代码。我忘了包含'NSKeyedArchiver'。 – WMios

+0

是的,这次它给出了错误:type'NSKeyedArchiver'has no member'unarchiveObjectWithData' – omgtheykilledkenny