我试图建立一个NSCollectionView充满了多个可编辑的TextViews。 (Swift中的OS X应用程序。)我的NSCollectionViewItem子类称为NoteViewItem。我试图让程序检测何时TextView之一已更改。我尝试在NoteViewItem的委托中同时使用controlTextDidChange和textDidChange和测试打印语句,以查看哪种方法有效。 ControlTextDidChange什么也没做; textDidChange认识到发生了更改,所以我同意了。
问题在于,textDidChange似乎指向与第一屏幕上显示的NoteViewItem不同的NoteViewItem。它无法识别原始NoteViewItem中设置的变量(称为theNote)。当我要求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))
}
}
}
最佳答案
我想到了。我的委托在TextView中被连接到NoteViewItem.xib的Interface Builder中的错误对象。我已将其连接到大纲中对象下方标记为“注释视图项目”的对象。它应该已经连接到File的Owner,因为File的Owner代表与xib相关的NoteViewItem.swift类。
您会认为,如果要将委托连接到NoteViewItem类,并且大纲中仅列出了一个Note View Item,则该Note View Item是您想要将其连接到的对象。不,您将它连接到完全不同的东西上,这不是“便笺视图项目”,而是“便笺视图项目”。我很高兴Interface Builder使事情变得如此简单。
关于swift - textDidChange指向错误的NSCollectionViewItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38267691/