我正在尝试构建一个充满多个可编辑TextView的NSCollectionView。 (Swift中的OS X应用程序。)我的NSCollectionViewItem的子类称为NoteViewItem。我试图在其中一个TextView发生更改时检测程序。我尝试在NoteViewItem的委托中使用controlTextDidChange和textDidChange以及test print语句来查看哪些可行。 ControlTextDidChange什么都没做; textDidChange认识到发生了变化,所以我就这样做了。
问题是textDidChange似乎指向不同的 NoteViewItem,而不是首先在屏幕上显示的那个。它无法识别原始NoteViewItem中设置的变量(称为注意);当我要求NoteViewItem打印String(self)时,我得到两个不同的结果,一个是设置初始文本,另一个是textDidChange。我想知道我是否错误地设置了我的代表和网点。关于为什么我的参考文献在这里的任何想法?
这是我的NoteViewItem代码:
import Cocoa
class NoteViewItem: NSCollectionViewItem, NSTextViewDelegate
{
// MARK: Variables
@IBOutlet weak var theLabel: NSTextField!
@IBOutlet var theTextView: NSTextView!
var theNote: Note?
{
didSet
{
// Pre: The NoteViewItem's theNote property is set.
// Post: This observer has set the content of the *item's text view*, and label if it has one.
guard viewLoaded else { return }
if let theNote = theNote
{
// textField?.stringValue = theNote.noteText
theLabel.stringValue = theNote.filename
theTextView.string = theNote.noteText
theTextView.display()
print("theTextView.string set to "+theTextView.string!+" in NoteViewItem "+String(self))
}
else
{
theLabel.stringValue = "Empty note?"
}
}
}
// MARK: Functions
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
// Hopefully this will set the note's background to white.
view.wantsLayer = true
view.layer?.backgroundColor = NSColor.whiteColor().CGColor
}
// MARK: - NSTextViewDelegate
/*
override func controlTextDidChange(notification: NSNotification)
{
print("Control text changed.")
}
*/
func textDidChange(notification: NSNotification)
{
if let noteyMcNoteface = theNote
{
print("On edit, we have a note: "+String(noteyMcNoteface))
}
else
{
print("On edit, we have no note. I am NoteViewItem "+String(self))
}
}
}
答案 0 :(得分:0)
我明白了。我的委托在TextView中连接到Interface Builder for NoteViewItem.xib中的错误对象。我将它连接到标题为Note View Item的对象,在轮廓中的对象下。它应该已经连接到File的所有者,因为File的所有者代表与xib相关联的NoteViewItem.swift类。
您认为如果您想将委托连接到NoteViewItem类并且大纲中只列出了一个Note View Item,那么Note View Item就是您的选择想把它连接到。不,你将它连接到完全不同的东西,不被称为注释视图项,但是注释视图项。我很高兴Interface Builder让事情变得如此简单。