将 NSTabViewItem 的副本从 NSTabView 添加到同一个 NSTabView

Adding a copy of an NSTabViewItem from an NSTabView into the same NSTabView

我正在创建一个简单的 Web 浏览器并想实现选项卡。为此,我使用了 NSTabView。我基本上希望每个选项卡都有一个 WebView 来显示网站已加载。我从只有一个选项卡开始,想在创建新选项卡时添加第一个选项卡的精确副本。我尝试了类似 tabView.addTabViewItem(tabView.tabViewItemAtIndex(0).copy() as NSTableViewItem) 的操作,但出现了 unrecognised selector sent to instance 错误。我已经查看了 NSTableViewNSTableViewItem 的文档,但不知道该怎么做。

编辑 我的整个错误如下所示:

015-03-14 17:15:57.884 Browser[1955:56547] -[NSTabViewItem copyWithZone:]: unrecognized selector sent to instance 0x600000100b40
2015-03-14 17:15:57.884 Browser[1955:56547] -[NSTabViewItem copyWithZone:]: unrecognized selector sent to instance 0x600000100b40

所以您收到该错误是因为您在未实现 -copyWithZone 的对象上调用 copy()。 (因为 NSTabViewItem 子类 NSView 不符合 NSCopying 协议)

您可以做的是初始化一个新的 NSTabViewItem,然后从第一项 (tabViewItemAtIndex(0)) 获取属性,然后将它们设置为您的新 [=14] =]

来自 documentation

您可以调用 setLabelsetIdentifiersetColorsetViewsetTooltip

初始化并设置新 NSTabViewItem 后,您可以将其添加到 NSTabView

NSTabViewItem *tempTabViewItem = [NSTabViewItem new];
//set your properties on tempTabViewItem here
tabView.addTabViewItem(tempTabViewItem);

感谢 Copy NSView in cocoa 和@MattyAyOh 的回答,我解决了我的问题:

var data = NSKeyedArchiver.archivedDataWithRootObject(view)
var newView = NSKeyedUnarchiver.unarchiveObjectWithData(data) as NSView
newTab.view = newView
tabView.addTabViewItem(newTab)