Ios 存储UITextView字符串/文本数据
所以我试图创建一个视图,显示一个可编辑的大文本视图。在故事板中,它被编辑为显示文本“在此处记笔记(向下滑动以关闭键盘):”作为占位符 我想让它记住当一个用户编辑文本而不是从那个。。。所以我用!=该比较器用于在swift中比较字符串。我不确定它是否会得到应用商店评论的批准,因为他们推荐isEqualToString() 不管怎样,下面的代码就是为了这个视图。。。如果用户从占位符中更改了输入的文本,则它不会记住该文本。它识别出它已被更改,但当您返回视图时,它会再次显示默认占位符。。。帮忙Ios 存储UITextView字符串/文本数据,ios,swift,swift3,userdefaults,Ios,Swift,Swift3,Userdefaults,所以我试图创建一个视图,显示一个可编辑的大文本视图。在故事板中,它被编辑为显示文本“在此处记笔记(向下滑动以关闭键盘):”作为占位符 我想让它记住当一个用户编辑文本而不是从那个。。。所以我用!=该比较器用于在swift中比较字符串。我不确定它是否会得到应用商店评论的批准,因为他们推荐isEqualToString() 不管怎样,下面的代码就是为了这个视图。。。如果用户从占位符中更改了输入的文本,则它不会记住该文本。它识别出它已被更改,但当您返回视图时,它会再次显示默认占位符。。。帮忙 impor
import Foundation
import UIKit
class MessageNotesViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var messageNotes: UITextView!
@IBOutlet var swiped: UISwipeGestureRecognizer!
var placeholder = "Take your notes here (Swipe Down to dismiss the keyboard): "
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
messageNotes.delegate = self
messageNotes.text = placeholder
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func openIn(_ sender: AnyObject) {
print("Share with Social Media or Copy to Notes")
//let textToShare = messageNotes.attributedText
// let objectsToShare = [textToShare]
//let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
//activityVC.popoverPresentationController?.sourceView = (sender as! UIView)
//self.present(activityVC, animated: true, completion: nil)
if let notes = messageNotes.text {
let avc = UIActivityViewController.init(activityItems: [notes], applicationActivities: nil)
avc.popoverPresentationController?.barButtonItem = sender as? UIBarButtonItem
self.present(avc, animated: true) {
print("completed")
}
}
}
func touchesBegan(_ messageNotes: UITextField) -> Bool {
self.view.endEditing(true)
return false
}
//let defaults = NSUserDefaults.
override func viewWillDisappear(_ animated: Bool) {
//PrepareForSegue didn't quite work
print("View Will Disappear")
//Testing if the user has entered any text if so preserve entered text
if messageNotes.text != placeholder {
//viewDidLoad(typedText)
print("the user altered the text in some way. \n")
placeholder = messageNotes.text
// assigns new placeholder
}
else{
// do something else - if needed
}
}
}
//Sub class decleration for ActivityForNotesViewController as called in openIn
class ActivityForNotesViewController: UIActivityViewController {
internal func _shouldExcludeActivityType(_ activity: UIActivity) -> Bool {
let activityTypesToExclude = [
]
if let actType = activity.activityType() {
if activityTypesToExclude.contains(actType) {
return true
}
else if super.excludedActivityTypes != nil {
return super.excludedActivityTypes!.contains(actType)
}
}
return false
}
}
尝试实现以下答案时出现一些编译错误
在ViewWillAppease函数中,编译器说“不能调用非函数类型“UserDefaults”的值”-如果让newText行带有红色下划线的UserDefaults.standardUserDefaults()
,编译器将突出显示该行
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
messageNotes.delegate = self
messageNotes.text = placeholder
if let newText = UserDefaults.standardUserDefaults().objectForKey("textKey"){
if newText.length > 0 {
messageNotes.text = newText
}
}
}
在ViewWillEnglishe函数中发现相同的编译错误:
override func viewWillDisappear(_ animated: Bool) {
//Prepare for segue didn't quite work for what I need
print("View Will Disappear")
//Testing if the user has entered any text if so preserve entered text
if messageNotes.text != placeholder {
//viewDidLoad(typedText)
print("the user altered the text in some way. \n")
UserDefaults.standardUserDefaults().setObject(messageNotes.text!, forKey:"textKey")
// assigns new placeholder
}
else{
// do something else - if needed
}
}
}
您需要将更改保存到某个地方,我建议使用UserDefaults,这是保存用户首选项和其他小数据块的好方法 我会在
视图中将其替换为将消失:
placeholder = messageNotes.text
与
在视图中将出现
我要添加:
messageNotes.text = placeholder
if let newText = UserDefaults.standardUserDefaults().object("textKey"){
if newText.length > 0 {
messageNotes.text = newText as! String
}
}
我下面的答案应该对你有用。此外,您不必担心如何使用=只要它工作,代码>就超过isqualltString()
。查看时,Apple实际上看不到您的特定代码。@WMios经过编辑以反映函数/编译器错误请勾选我修改的代码。我在不知不觉中使用了Swift 2语法-检查了我链接的文档to@WMios我想我可能已经纠正了错误。。。我使用了UserDefaults.standard.object(forKey:“textKey”)
而不是UserDefaults.standardUserDefaults().object(“textKey”)
。。。它还说,在if语句中,需要替换行messageNotes.text=newText
,所以我做了messageNotes.text=newText as!字符串
。。。所有的编译器错误都消失了。是的,这和我14分钟前所做的更改差不多。我没有将强制转换添加到字符串。是否需要进行任何导入或其他操作,因为它给出了编译器错误:无法调用非函数类型“UserDefaults”的值?我会试着看一下你贴的文档页面。在哪一行?你确定你用的是Swift 3吗?如果没有,您可以将NS
添加到UserDefaults
之前,使其成为NSUserDefaults
。还要注意的是,ObjectForKey
应该是ObjectForKey
。当我添加您建议的代码时,它给了我那个错误。也许我做错了什么。它特别抱怨UserDefaults的两个实例。。。奇怪的是,它认识到将NSUserDefaults切换为UserDefaults,但随后不会生成。听起来确实像个虫子。
messageNotes.text = placeholder
if let newText = UserDefaults.standardUserDefaults().object("textKey"){
if newText.length > 0 {
messageNotes.text = newText as! String
}
}