2009-12-19 8 views
1

En fait, j'ai textfield dans ma sixième section de la tableview et un textview dans la onzième section de la textview.Mon problème est quand je clique sur le texfield de la sixième section le clavier couvre le texte champ et la même chose se passait avec le textview.for que j'ai utilisé NSNotificationCenters. et j'ai écrit le code comme:NSNotification problème pour textfield et textview

- (void) viewWillAppear: (BOOL) animé {

tableView.tableFooterView=nil; 
[self reloadView]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification object:self.view.window]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
              name:UIKeyboardWillHideNotification object:self.view.window]; 
[tableView reloadData]; 

}

- (void) setViewMovedUp: (BOOL) movedUp {

[UIView beginAnimations: nil contexte: NULL]; [UIView setAnimationDuration: 0,5]; // si vous voulez faire glisser la vue vers le haut CGRect rect = mview.frame; if (movedUp) {
rect.origin.y = rect.origin.y - kOFFSET_FOR_KEYBOARD; rect.size.height = rect.size.height + kOFFSET_FOR_KEYBOARD; } sinon { rect.origin.y = rect.origin.y + kOFFSET_FOR_KEYBOARD; rect.size.height = rect.size.height - kOFFSET_FOR_KEYBOARD; } mview.frame = rect;

[UIView commitAnimations]; 

}

  • (void) keyboardWillShow: (NSNotification *) {notif // printf ("\ n clavier SHOW"); // le clavier sera affiché maintenant. en fonction pour laquelle textfield est activé, déplacer vers le haut ou vers le bas le point de vue se déplacer de manière appropriée

    if ([notesTextView isFirstResponder] & & mview.frame.origin.y> = 0) {
    [self setViewMovedUp: OUI]; } else if ([notesTextView isFirstResponder] & & mview.frame.origin.y < 0!) { [auto setViewMovedUp: NO]; }

    else if ([wineryTextField isFirstResponder] & & mview.frame.origin.y> = 0) {
    [auto setViewMovedUp: OUI]; } else if ([wineryTextField isFirstResponder] & & mview.frame.origin.y < 0!) { [auto setViewMovedUp: NO]; }

}

  • (void) keyboardWillHide: (NSNotification *) {notif // printf ("\ n clavier cacher"); // le clavier sera affiché maintenant.en fonction pour laquelle textfield est activé, déplacer vers le haut ou vers le bas le point de vue se déplacer de manière appropriée

    if ([notesTextView isFirstResponder] & & mview.frame.origin.y> = 0) { [self setViewMovedUp: OUI]; } else if ([notesTextView isFirstResponder] & & mview.frame.origin.y < 0!) { [auto setViewMovedUp: NO]; }

    else if ([wineryTextField isFirstResponder] & & mview.frame.origin.y> = 0) { [auto setViewMovedUp: OUI]; } else if ([wineryTextField isFirstResponder] & & mview.frame.origin.y < 0!) { [auto setViewMovedUp: NO]; }

}

  • (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) vont replacementText: (NSString *) texte { if ([texte isEqualToString: @ "\ n"]) {

    //event.eventNotes = notesTextView.text; 
    
    if(textView==notesTextView) 
    { 
    
        //[self setViewMovedUp:NO]; 
        [textView resignFirstResponder]; 
    } 
    return NO; 
    

    }

    return YES;

}

  • (BOOL) textFieldShouldReturn: (UITextField *) textField {

    if (textField == wineryTextField) { [auto setViewMovedUp: NO]; [wineryTextField resignFirstResponder]; }}

Ce qui précède est le code que je l'avais écrit pour le Scrolling view.but le problème est quelques fois quand je clique sur le champ de texte, il défiler vers le bas au lieu de défilement up.The même a été happed avec le textView.the problème devenait quand je navigue vers un autre contrôleur et reviens et clique sur pour texfield ou textview plus léger.

Pls tout donner une solution parfaite pour mon problème.

Merci à tous les gars u .....

Répondre

0

Vous voudrez peut-être envisager d'utiliser la méthode UITableView suivante:

- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath 
        animated:(BOOL)animated 
       scrollPosition:(UITableViewScrollPosition)scrollPosition 

Lorsque la indexPath contient la ligne que vous souhaitez afficher en haut et scrollPosition est UITableViewScrollPositionTop.

Si vous voulez que la vue de table revienne en arrière, enregistrez la ligne qui était en haut de l'écran visible à l'aide de la méthode UITableView suivante.

- (NSArray *)indexPathsForVisibleRows 

Ensuite, avec la première méthode mentionnée ci-dessus, faites défiler jusqu'à la ligne enregistrée.