2012-04-05 84 views
2

我有三個文本字段:名字,姓氏和年齡,也是一張照片。我該怎麼做才能讓信息自動保存,以便我不必點擊按鈕?在NSStrings中自動保存

這是我ViewController.h

#import <UIKit/UIKit.h> 

@interface ContactViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { 

    IBOutlet UIImageView *contactImageView; 
    IBOutlet UITextField *firstNameTextField; 
    IBOutlet UITextField *lastNameTextField; 
    IBOutlet UITextField *ageTextField; 
} 

- (IBAction)save:(id)sender; 
- (IBAction)chooseImage:(id)sender; 

@end 

這是我ViewController.m

- (void)viewDidLoad { 
[super viewDidLoad]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSString *frontName = [defaults objectForKey:@"firstname"]; 
    NSString *lastName = [defaults objectForKey:@"lastname"]; 

    int age = [defaults integerForKey:@"age"]; 
    NSString *ageString = [NSString stringWithFormat:@"%i",age]; 

    NSData *imageData = [defaults dataForKey:@"image"]; 
    UIImage *contactImage = [UIImage imageWithData:imageData]; 

    firstNameTextField.text = frontName; 
    lastNameTextField.text = lastName; 
    ageTextField.text = ageString; 
    contactImageView.image = contactImage; 
} 


- (void)viewDidUnload { 

    [contactImageView release]; 
    contactImageView = nil; 
    [firstNameTextField release]; 
    firstNameTextField = nil; 
    [lastNameTextField release]; 
    lastNameTextField = nil; 
    [ageTextField release]; 
    ageTextField = nil; 
    [super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

- (IBAction)save:(id)sender { 
    [firstNameTextField resignFirstResponder]; 
    [lastNameTextField resignFirstResponder]; 
    [ageTextField resignFirstResponder]; 

    // Create strings and integer to store the text info 
    NSString *frontName = [firstNameTextField text]; 
    NSString *lastName = [lastNameTextField text]; 
    int age = [[ageTextField text] integerValue]; 

    UIImage *contactImage = contactImageView.image; 
    NSData *imageData = UIImageJPEGRepresentation(contactImage, 100); 


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [defaults setObject:frontName forKey:@"firstname"]; 
    [defaults setObject:lastName forKey:@"lastname"]; 
    [defaults setInteger:age forKey:@"age"]; 
    [defaults setObject:imageData forKey:@"image"]; 

    [defaults synchronize]; 

    NSLog(@"Data saved"); 
} 

- (IBAction)chooseImage:(id)sender { 
    UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease]; 
    picker.delegate = self; 
    picker.allowsEditing = YES; 
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    [self presentModalViewController:picker animated:YES]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
    contactImageView.image = image; 

    [picker dismissModalViewControllerAnimated:YES]; 
} 


- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 

    [picker dismissModalViewControllerAnimated:YES]; 

} 

回答

2

你將不得不與<UITextFieldDelegate>協議工作

參考:UITextFieldDelegate Protocol

你會有設置

textField.delegate = yourViewController 

然後可以使用協議功能,處理您的textview的輸入和字符更改。

比如你cound使用

- (BOOL)textFieldShouldReturn:(UITextField *)textField 

當用戶按下返回按鈕保存文本框的內容=)

編輯:也許這種方法更適合您的需求 - 我有點寫帖子=)

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    //save your textfied.text string here :) 
} 
+0

考慮他的問題 - (空)textFieldDidEndEditing:(*的UITextField)文本框可能更合適。 – sosborn 2012-04-06 06:18:19

+0

同意:)我沒有太多時間,想給他一個快速的概述。 – 2012-04-06 06:58:08

0

您需要將UITextfield的委託設置爲視圖控制器在當昨天累3210法像

firstNameTextField.delegate = self; 
lastNameTextField.delegate = self; 
ageTextField.delegate = self; 

您的視圖控制器需要實現UITextFieldDelegate協議方法:

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    //Do save Operations here 
} 

文本編輯完成後,這將只保存。如果你想保存爲用戶鍵入,使用

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSString *stringToSave=[textField.text stringByReplacingCharactersInRange:range withString:string]; 
    //Identify text field by comparing textField with you text fields and do save operations 
    return YES; 
}