2010-08-04 18 views
5

J'essaie d'ajouter uitextfield à mon alterview. Lorsque l'utilisateur essaie d'entrer du texte, le alterview est supposé se décaler un peu afin que le clavier ne se chevauche pas et lorsque vous appuyez sur la touche "Terminé", le clavier est censé disparaître et le alertview devrait revenir en arrière.iphone-sdk: L'ajout d'un champ de texte à UIAlertview ne fonctionne pas dans iOS 4?

Tout fonctionne correctement sous iOS 3.1.2 (et aussi en 3.2) mais dès que j'essaie de l'exécuter sous iOS 4, le alertview est affiché dans la mauvaise position et le clavier ne disparaît pas. Aucune suggestion? Voici mon code:

- (void)addItemAction{ 

workoutName = [[UIAlertView alloc] initWithTitle:@"New Workout" message:@"Insert the name of your new workout:\n    " delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Done", nil]; 
workoutName.cancelButtonIndex = 0; 
UITextField *titleField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 90.0, 260.0, 25.0)]; 
titleField.delegate = self; 
titleField.borderStyle = UITextBorderStyleRoundedRect; 
titleField.returnKeyType = UIReturnKeyDone; 
[workoutName addSubview:titleField]; 
[workoutName show]; 


} 
- (BOOL)textFieldShouldReturn:(UITextField *)textField { 


[textField resignFirstResponder]; 
return YES; 

} 

- (void)textFieldDidBeginEditing:(UITextField *)textField { 

[UIView beginAnimations:nil context:NULL]; 
CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0.0, -70.0); 
[workoutName setTransform:myTransform]; 
[UIView commitAnimations]; 

} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 

[UIView beginAnimations:nil context:NULL]; 
CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0.0, 0.0); 
[workoutName setTransform:myTransform]; 
[UIView commitAnimations]; 
self.newWorkout = textField.text; 

} 

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ 

if (buttonIndex == 1) { 
    if (self.newWorkout != @"TestWorkout"){ 
    [self.workoutPlanArray insertObject:[NSDictionary dictionaryWithObjectsAndKeys:self.newWorkout, @"titleValue", @"04.08.10", @"dateValue", nil] atIndex:counter]; 
    counter++; 
    [self.tableView reloadData]; 
    } 
} 


} 

Répondre

5

J'utilise aussi alertview avec un champ de texte dans mon application, & aussi sur ioS 4.0. Cela fonctionne très bien.

Voici l'exemple de code: _

-(void)showAlert{ 

showAlert=YES; //boolean variable 

createNewAlert =[[UIAlertView alloc] initWithTitle:@"ADD item" message:@"Put it blank textfield will cover this" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; 

UITextField *txtName = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)]; 
[email protected]""; 
[txtName setBackgroundColor:[UIColor whiteColor]]; 
[txtName setKeyboardAppearance:UIKeyboardAppearanceAlert]; 
[txtName setAutocorrectionType:UITextAutocorrectionTypeNo]; 

[txtName setTextAlignment:UITextAlignmentCenter]; 
[createNewAlert addSubview:txtName]; 


[createNewAlert show]; 
} 

Vous pouvez également consulter les deux méthodes suivantes qui sont appelées notifications de clavier.

-(void)keyboardWillShow: (id) notification { 

if(showAlert==YES) 
{ 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    [createNewAlert setTransform:CGAffineTransformMakeTranslation(0,-60)]; 
    [createNewAlert show]; 
    [UIView commitAnimations]; 
} 

}

-(void)keyboardWillHide: (id) notification { 

if(showAlert==YES) 
{ 


     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.3]; 
     [createNewAlert setTransform:CGAffineTransformMakeTranslation(0,+60)]; 

     [UIView commitAnimations]; 

} 
} 
0

Je n'ai pas la moindre idée (encore) en ce qui concerne le positionnement de l'alerte, mais vous pouvez essayer d'envoyer resignFirstResponder dans votre implémentation textFieldShouldReturn au alertView.

Aussi, cela devrait faire disparaître le clavier (même si je ne sais pas exactement pourquoi).

1

J'ai eu ce problème qui est nouveau dans iOS 4 aussi bien. J'ai essayé de faire une traduction et j'ai réalisé que peu importe la traduction, seulement une traduction a été appelée.

myAlert = my AlertView 
CGAffineTransform rotate = CGAffineTransformMakeTranslation(0.0f, 0.0f); 
myAlert.transform = rotate; 
[myAlert show]; 
[myAlert release]; 

Il doit y avoir un rappel qui est déclenché à partir de la traduction, mais cela résout le problème. Il devrait agir comme il l'a fait dans pré-iOS 4.0.

0

Ouvrez le fichier xib, cliquez sur le UIView et assurez-vous que la case à cocher "User Interaction Enabled" est cochée.