Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用NSUserDefaults保存UITextView弹出窗口中的击键_Ios_Swift_Uitextview_Popover - Fatal编程技术网

Ios 使用NSUserDefaults保存UITextView弹出窗口中的击键

Ios 使用NSUserDefaults保存UITextView弹出窗口中的击键,ios,swift,uitextview,popover,Ios,Swift,Uitextview,Popover,我有一个名为NotesViewController的弹出框,其中包含一个UITextView。当用户单击图形视图控制器中的注释按钮时,会发生弹出窗口 弹出框显示良好,但每当我单击关闭弹出框并希望能够保存时,UITextField中的文本就会消失 如何保存文本的例子,无论是在每次击键后还是当用户点击弹出窗口时,都可以作为一个答案 以下是我所拥有的: class NotesViewController: UIViewController { @IBOutlet weak var noteVi

我有一个名为
NotesViewController
的弹出框,其中包含一个
UITextView
。当用户单击
图形视图控制器
中的
注释
按钮时,会发生弹出窗口

弹出框显示良好,但每当我单击关闭弹出框并希望能够保存时,
UITextField
中的文本就会消失

如何保存文本的例子,无论是在每次击键后还是当用户点击弹出窗口时,都可以作为一个答案

以下是我所拥有的:

class NotesViewController: UIViewController
{
    @IBOutlet weak var noteView: UITextView! {
    didSet{
        defaults.setObject(noteView.text, forKey: "previousText")
        noteView.text = notes
    }
}

var notes = " " {
    didSet {
        noteView?.text = notes

    }
}

let defaults = NSUserDefaults.standardUserDefaults()

class GraphViewController: UIViewController, GraphViewDataSource, UIPopoverPresentationControllerDelegate
{
    //
    //...
    // prepare segue for popover
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if let identifier = segue.identifier {
            switch identifier {
                //this is the identifier for the popover segue
                case "Show Notes":
                    if let nvc = segue.destinationViewController as? NotesViewController {
                        if let ppc = nvc.popoverPresentationController {
                            ppc.delegate = self
                        }

                        if let previousNotes = nvc.defaults.stringForKey("previousText") {
                            nvc.notes = previousNotes
                        }
                    }
                default: break
            }
        }
    }
}

罗里的评论是正确的。将NotesViewController设置为委托允许我使用跟踪更改的方法

这就是我的解决方案:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    //first check if this is the segue we are talking about here
    if let identifier = segue.identifier {
        switch identifier {
        case "Show Notes":
            if let nvc = segue.destinationViewController as? NotesViewController {
                if let ppc = nvc.popoverPresentationController {
                    ppc.delegate = self
                }

                if let previousNotes = nvc.defaults.stringForKey("textPreviouslyEnteredByUser") {
                    nvc.notes = previousNotes
                }
            }
        default: break
        }
    }
}


对于文本视图,将其委托设置为您的NotesViewController,并实现委托方法,这些方法会在文本发生更改时通知您,编辑开始/完成。然后,您可以在需要的任何位置缓存更新的文本。见:
class NotesViewController: UIViewController, UITextViewDelegate
{
    var defaults = NSUserDefaults.standardUserDefaults()

    @IBOutlet weak var noteView: UITextView! {
        didSet {
            noteView?.text = notes
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        noteView.delegate = self
    }

    func textViewDidChange(textView: UITextView) {
        defaults.setObject(textView.text, forKey: "textPreviouslyEnteredByUser")
    }


    var notes = " " {
        didSet {
        noteView?.text = notes
        }
    }
}