我希望應用程序在每次更改值時保存數據,並在用戶返回頁面時加載新值。
我會爲您提供斯威夫特版本,與obj-C版本在語義上是相同的,我敢肯定你知道如何編寫的OBJ-C的代碼,如果沒有,請讓我知道......(我注意到只有在我寫了Swift代碼之後才使用Obj-C,而且當時我的Obj-C已經變得生鏽......道歉)。
由於我不知道你是否使用UITextView
或UITextField
,我將爲它們提供版本(它們非常相似......)。
爲了當他們在文本字段/視圖改變爲保存值,你就必須掛鉤到UITextField
/UITextView
發出時,它的文本值變化的事件。您可以通過將視圖控制器設置爲UITextFieldDelegate
/UITextView
來完成此操作。
如果您正在使用UITextField
:
class MyViewController : UIViewController, UITextFieldDelegate{
var _textview : UITextField!
override func viewDidLoad() {
super.viewDidLoad()
_textview.delegate = self
}
func textFieldDidEndEditing(textField: UITextField) {
// this is called after the textfield loses focus
// NSUserDefaults.standardUserDefaults().setValue(textField.text, forKey: "textfield_value")
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// this is called whenever the textfield's text changes
NSUserDefaults.standardUserDefaults().setValue(textField.text, forKey: "textfield_value")
return true
}
}
如果您正在使用UITextView
:
class MyViewController : UIViewController, UITextViewDelegate{
var _textview : UITextView!
override func viewDidLoad() {
super.viewDidLoad()
_textview.delegate = self
}
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
// this is called after the textfield loses focus
// I would not recommend this, but it should work as well in here
// NSUserDefaults.standardUserDefaults().setValue(textView.text, forKey: "textview_value")
return true
}
func textViewDidEndEditing(textView: UITextView) {
// this is called whenever the textview's text changes
NSUserDefaults.standardUserDefaults().setValue(textView.text, forKey: "textview_value")
}
}
有我同時用於UITextView
和UITextField
,一個在每個文本變化觸發兩個委託方法,並且在文本字段失去焦點之後。無論你想在每次修改完成後保存到用戶的默認值(我不會推薦它,但肯定有使用情況...)。當文本字段丟失焦點時,我只會保存數據(如果退出應用程序,我不能100%確定文本字段是否失去焦點,但我認爲它應該,因此這應該也是保存以保存您的數據)。
將文本字段的值保存在其中一種方法中,您應該很好地去...
,並且確保你從viewDidLoad()
或viewDidAppear()
加載數據:
override func viewDidLoad() {
super.viewDidLoad()
_textview.text = NSUserDefaults.standardUserDefaults().valueForKey("textfield_text") as! String
_textview.delegate = self
}
Objective-C的
在你ViewController.h
:
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *textview;
@end
在你ViewController.m
:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[_textview setText:[defaults valueForKey:@"textfield_text"]];
[_textview setDelegate:self];
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:textField.text forKey:@"textfield_text"];
[defaults synchronize];
}
@end
任何錯誤使用視圖控制器的視圖 「顯示」/ 「消失」 的方法呢? –
以及我現在正在嘗試,但仍然沒有運氣。 – ash
我正在使用出現/消失,但是當我更改視圖數據刪除。 – ash