UIView, UIScrollView and UITextFields problem calling Method

Posted by Jeff Groby on Stack Overflow See other posts from Stack Overflow or by Jeff Groby
Published on 2010-02-16T19:04:45Z Indexed on 2010/06/07 4:42 UTC
Read the original article Hit count: 305

I have a view with several embedded UITextFields, this UIView is subordinated to a UIScrollView in IB. Each text field is supposed to invoke a method called updateText defined in the viewcontroller implementation file when the user is done editing the field. For some reason, the method updateText never gets invoked. Anyone have any ideas how to go about fixing this? The method fired off just fine when the UIScrollView was not present in the project but the keyboard would cover the text fields during input, which was annoying. Now my textfields move up above the keyboard when it appears, but won't fire off the method when done editing.

Here is my implementation file:


#import "MileMarkerViewController.h"


@implementation MileMarkerViewController

@synthesize scrollView,milemarkerLogDate,milemarkerDesc,milemarkerOdobeg,milemarkerOdoend,milemarkerBusiness,milemarkerPersonal,milemarker;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Initialization code
    }
    return self;
}

- (BOOL) textFieldShouldReturn: (UITextField*) theTextField {
    return [theTextField resignFirstResponder];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver: self 
                                             selector: @selector(keyboardWasShown:)
                                                 name: UIKeyboardDidShowNotification 
                                               object: nil];

    [[NSNotificationCenter defaultCenter] addObserver: self
                                             selector: @selector(keyboardWasHidden:)
                                                 name: UIKeyboardDidHideNotification 
                                               object: nil];

    keyboardShown = NO; // 1
    [scrollView setContentSize: CGSizeMake( 320, 480)]; // 2
}


- (void)keyboardWasShown:(NSNotification*)aNotification {
    if (keyboardShown) return;

    NSDictionary* info = [aNotification userInfo];

    // Get the size of the keyboard.
    NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    // Resize the scroll view (which is the root view of the window)
    CGRect viewFrame = [scrollView frame];
    viewFrame.size.height -= keyboardSize.height;
    scrollView.frame = viewFrame;

    // Scroll the active text field into view.
    CGRect textFieldRect = [activeField frame];
    [scrollView scrollRectToVisible:textFieldRect animated:YES];

    keyboardShown = YES;
}

- (void)keyboardWasHidden:(NSNotification*)aNotification {
    NSDictionary* info = [aNotification userInfo];

    // Get the size of the keyboard.
    NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    // Reset the height of the scroll view to its original value
    CGRect viewFrame = [scrollView frame];
    viewFrame.size.height += keyboardSize.height;
    [scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
    scrollView.frame = viewFrame;

    keyboardShown = NO;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    activeField = textField;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    activeField = nil;
}




- (IBAction)updateText:(id) sender {

    NSLog(@"You just entered: %@",self.milemarkerLogDate.text);
    self.milemarker.logdate = self.milemarkerLogDate.text;
    self.milemarker.desc = self.milemarkerDesc.text;
    self.milemarker.odobeg = self.milemarkerOdobeg.text;
    self.milemarker.odoend = self.milemarkerOdoend.text;
    self.milemarker.business = self.milemarkerBusiness.text;
    self.milemarker.personal = self.milemarkerPersonal.text;
    NSLog(@"Original textfield is set to: %@",self.milemarker.logdate);
    [self.milemarker updateText];
}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)dealloc {
    [super dealloc];
}


@end

© Stack Overflow or respective owner

Related posts about iphone-sdk-3.0

Related posts about delegates