首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >textDidChange指向错误的NSCollectionViewItem

textDidChange指向错误的NSCollectionViewItem
EN

Stack Overflow用户
提问于 2016-07-08 13:15:52
回答 1查看 107关注 0票数 0

我正在尝试构建一个包含多个可编辑TextViews的TextViews。(Swift中的OS应用程序)我的NSCollectionViewItem子类称为NoteViewItem。我试图让程序检测时,其中一个TextView已经改变。我尝试在NoteViewItem的委托中使用controlTextDidChange和textDidChange,并使用test print语句来查看哪种方法可以工作。ControlTextDidChange什么也没做,textDidChange知道发生了什么变化,所以我就这么做了。

问题是,textDidChange似乎指向的是与屏幕上最初显示的不同的NoteViewItem。它无法识别原始theNote中设置的变量(称为NoteViewItem );当我要求NoteViewItem打印字符串(Self)时,我得到了两个不同的结果,一个是在设置初始文本时,另一个是在textDidChange中。我想知道我是否把我的代表和网点设置错了。对为什么我的推荐人不在这里有什么想法吗?

下面是我的NoteViewItem代码:

代码语言:javascript
复制
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))
        }   
    }   
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-10 00:06:56

我想通了。在TextView中,我的委托连接到NoteViewItem.xib接口生成器中的错误对象。我已经将它连接到大纲中的objects下面的标有Note项的对象。它应该连接到文件所有者,因为文件所有者代表与xib关联的NoteViewItem.swift类。

您可能认为,如果您想将委托连接到NoteViewItem类,并且大纲中列出了一个NoteViewItem项,那么NoteViewItem项就是您想要连接到的东西。不,您可以将它连接到完全不同的东西,即不是Note View项,而是Note View项。我很高兴Interface让事情变得如此简单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38267691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档