Ответ 1
Чтобы прямо "скопировать" NSView, представление должно реализовать протокол NSCopying
. К сожалению, NSView не делает.
К счастью, он реализует протокол NSCoding
, что означает, что мы все равно можем дублировать представление, например:
NSData * archivedView = [NSKeyedArchiver archivedDataWithRootObject:myView];
NSView * myViewCopy = [NSKeyedUnarchiver unarchiveObjectWithData:archivedView];
И вой! Теперь у вас есть дубликат myView
.
Изменить: (версия Swift)
let archivedView = NSKeyedArchiver.archivedData(withRootObject: myView)
let myViewCopy = NSKeyedUnarchiver.unarchiveObject(with: archivedView)
(archivedView
имеет тип Data
, а не NSData
)