来自Google翻译:
您好,当我点击文本字段时,我对选择器视图进行了一些修改。
当我从文本字段导航到文本字段而未触及“完成”按钮时,我转到包含选取器视图的文本字段,并且按下完成后,滚动视图不会返回其原始大小。
你知道该怎么做吗?
原件:
Bonjour,jai fais quelques mod pour qu'un picker view apparaisse。
Quand je navigue de text field en text field sans toucher sur la touche“Terminé”et que je rend dans un text field qui contient un picker view et que la,j'appuissurarminé,le scroll view ne reprend pas sa taille initiale。
Savez vous comment faire s'ilvousplaît?
Voici mon code:
- (void)viewDidLoad
{
[super viewDidLoad];
[ScrollView setContentSize:CGSizeMake(320, 974)];
[ScrollView setScrollEnabled:YES];
//on abonne notre instance aux notifications du clavier lorsqu'il apparaît et lorsqu'il disparait
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification *)aNotification {
//si le clavier est déjà présent on ne fait rien
if (keyboardIsShown) {
return;
}
if (nom.editing == YES)
{
//on récupère la taille du clavier
NSDictionary* info = [aNotification userInfo];
CGRect _keyboardEndFrame;
[[info valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&_keyboardEndFrame];
CGSize keyboardSize = _keyboardEndFrame.size;
//on crée une nouvelle frame pour la scrollView
CGRect viewFrame = self.ScrollView.frame;
viewFrame.size.height -= keyboardSize.height;
//on redimensionne la scrollView dans une animation
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[self.ScrollView setFrame:viewFrame];
[UIView commitAnimations];
//on scroll jusqu'au champs texte en cours d'édition
CGRect textFieldRect = nom.frame;
[self.ScrollView scrollRectToVisible:textFieldRect animated:YES];
//on enregistre l'état actuel du clavier
keyboardIsShown = YES;
}
else if (dateVol.editing == YES)
{
//on récupère la taille du clavier
NSDictionary* info = [aNotification userInfo];
CGRect _keyboardEndFrame;
[[info valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&_keyboardEndFrame];
CGSize keyboardSize = _keyboardEndFrame.size;
//on crée une nouvelle frame pour la scrollView
CGRect viewFrame = self.ScrollView.frame;
viewFrame.size.height -= keyboardSize.height;
//on redimensionne la scrollView dans une animation
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[self.ScrollView setFrame:viewFrame];
[UIView commitAnimations];
//on scroll jusqu'au champs texte en cours d'édition
CGRect textFieldRect = prenom.frame;
[self.ScrollView scrollRectToVisible:textFieldRect animated:YES];
//on enregistre l'état actuel du clavier
keyboardIsShown = YES;
}
}
//méthode appelée lorsque le clavier disparaît (on quitte l'édition d'un champs texte)
- (void)keyboardWillHide:(NSNotification *)aNotification {
if (nom.editing == YES || dateVol.editing == YES)
{
//get the size of the keyboard
NSDictionary* info = [aNotification userInfo];
CGRect _keyboardEndFrame;
[[info valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&_keyboardEndFrame];
CGSize keyboardSize = _keyboardEndFrame.size;
//resize the scroll view
CGRect viewFrame = self.ScrollView.frame;
viewFrame.size.height += keyboardSize.height;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
[self.ScrollView setFrame:viewFrame];
[UIView commitAnimations];
keyboardIsShown = NO;
}
}
答案 0 :(得分:0)
我认为您说您已将UITextField的inputView
设置为UIPickerView,并且在使用UIPickerView后点击Done时,scrollview不会返回其先前的位置。查看代码,我认为这是因为只有在系统发送keyboardWillHide
时才会调用UIKeyboardWillHideNotification
方法。我假设当您按下完成按钮时系统没有发送UIKeyboardWillHideNotification
。当您按下将调用keyboardWillHide
方法的完成按钮时,您需要为所调用的方法添加代码。