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

时间:2015-03-14 15:18:10

标签: objective-c cocoa swift 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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

你可以做些什么来初始化新的NSTabViewItem,然后从第一个项目tabViewItemAtIndex(0)获取属性,然后将它们设置为新的NSTabViewItem

来自documentation

您可以致电setLabelsetIdentifiersetColorsetViewsetTooltip

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

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