2016-07-28 89 views
1

我有一個包含這樣一些對象的視圖(綠色區域是我的看法): 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

回答

0

視圖可以有一個超級視圖,並且每次將視圖添加到超級視圖時,它都會從其先前的超級視圖中移除。 NSView未實施NSCopying協議,因此您無法通過調用copy來複制視圖。搜索「複製NSView」。

0

看起來問題是您正在創建一個等於您想要複製的視圖的新視圖。但是,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