0

J'ai une vue avec plusieurs UITextFields intégrés, ce UIView est subordonné à un UIScrollView dans IB. Chaque champ de texte est supposé appeler une méthode appelée updateText définie dans le fichier d'implémentation de viewcontroller lorsque l'utilisateur a fini d'éditer le champ. Pour une raison quelconque, la méthode updateText n'est jamais invoquée. Quelqu'un at-il des idées sur la façon de résoudre ce problème? La méthode s'est très bien déclenchée quand UIScrollView n'était pas présent dans le projet mais le clavier couvrirait les champs de texte lors de la saisie, ce qui était gênant. Maintenant, mes champs de texte se déplacent au-dessus du clavier quand il apparaît, mais ne déclencheront pas la méthode une fois l'édition terminée.UIView, UIScrollView et UITextFields Problème appelant Méthode

Voici mon dossier de mise en œuvre:


#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 
+0

Je dirais vérifier les actions encore et s'assurer que le xib est sauvé ... au moins ce sont les problèmes que j'ai toujours avec IB. – anq

Répondre

0

Je pense que vous avez déjà connu une solution en raison de la date de poste.

Vous pouvez implémenter la méthode textFieldShouldReturn et abandonner le premier répondeur de textField dans la méthode.

textFieldDidEndEditing est appelé après le premier répondeur textField.