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
}
}
}