2

姓、名、年齢、写真の 3 つのテキスト フィールドがあります。ボタンをクリックする必要がないように、情報が自動的に保存されるようにするにはどうすればよいですか?

これは私の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];

}
4

2 に答える 2

2

<UITextFieldDelegate>プロトコルを使用する必要があります

参考:UITextFieldDelegate プロトコル

設定する必要があります

textField.delegate = yourViewController

その後、テキストビューの入力と文字の変更を処理するプロトコル関数を操作できます。

たとえば、使用できます

- (BOOL)textFieldShouldReturn:(UITextField *)textField

ユーザーが戻るボタンを押したときにテキストフィールドの内容を保存する =)

編集:おそらくこの方法はあなたのニーズにより適しています-昨日投稿を書いているとき、私は少し疲れていました=)

- (void)textFieldDidEndEditing:(UITextField *)textField {
    //save your textfied.text string here :)
}
于 2012-04-05T16:18:55.723 に答える
0

You need to set the delegate of the UITextfield to the view controller in your viewDidLoad method like

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

Your view controller needs to implement the UITextFieldDelegate Protocol method:

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

This will save only after the text is done editing. If you want to save as the user is typing, use

- (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;
}
于 2012-04-06T06:21:32.647 に答える