2010-08-04 2 views
5

Ich versuche, uitextfield zu meinem alterview hinzuzufügen. Wenn der Benutzer versucht, Text einzugeben, sollte sich die alterview ein wenig nach oben verschieben, damit sich die Tastatur nicht überschneidet, und wenn die Done-Taste gedrückt wird, sollte die Tastatur verschwinden und die alertview sollte zurückschalten.iphone-sdk: Hinzufügen eines Textfelds zu UIAlertview funktioniert nicht in iOS 4?

Alles funktioniert gut, wenn es in iOS 3.1.2 laufen (und auch in 3.2), aber sobald ich versuche, es unter iOS zu laufen 4 der alertview wird in der falschen Position angezeigt und die Tastatur wird nicht verschwinden. Irgendwelche Vorschläge? Hier ist mein 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]; 
    } 
} 


} 

Antwort

5

Ich benutze auch Alertview mit einem Textfeld in meiner Anwendung, & das auch auf ioS 4.0. Es funktioniert gut. Hier

ist der Beispielcode: _

-(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]; 
} 

Auch können Sie die folgenden zwei Methoden beziehen, die auf Tastatur Mitteilungen genannt werden.

-(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

ich keine Ahnung haben (noch) in Bezug auf die Positionierung der Warnung, aber Sie könnten versuchen resignFirstResponder in Ihrer textFieldShouldReturn Implementierung zum alertView senden.

Auch das sollte die Tastatur verschwinden lassen (auch wenn ich nicht genau weiß warum).

1

Ich hatte dieses Problem, das auch in iOS 4 neu ist. Ich habe versucht, eine Übersetzung darauf zu machen und habe festgestellt, dass die Übersetzung keine Rolle spielt, nur dass eine Übersetzung aufgerufen wurde.

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

Es muss einen Rückruf geben, der von der Übersetzung ausgelöst wird, aber das behebt das Problem. Es sollte so funktionieren wie vor iOS 4.0.

0

Öffnen Sie die Datei xib, klicken Sie auf die UIView und stellen Sie sicher, dass das Kontrollkästchen "User Interaction Enabled" aktiviert ist.

Verwandte Themen