Iphone-sdk: Добавление текстового поля в UIAlertview не работает в iOS 4?

Я пытаюсь добавить uitextfield в мой alterview. Когда пользователь пытается ввести текст, предполагается, что alterview немного сдвинется, чтобы клавиатура не перекрывалась, а при нажатии клавиши "Готово" клавиатура должна исчезнуть, а alertview должна вернуться назад.

Все работает отлично, когда запускается в iOS 3.1.2 (а также в 3.2), но как только я пытаюсь запустить его под iOS 4, alertview отображается в неправильном положении, и клавиатура не исчезнет, Какие-либо предложения? Вот мой код:

- (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];
 }
}
}
5 ответов

Я также использую alertview с текстовым полем в своем приложении, и это тоже на ioS 4.0.  Прекрасно работает.

Вот пример кода: _

-(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)];
txtName.text=@"";
[txtName setBackgroundColor:[UIColor whiteColor]];
[txtName setKeyboardAppearance:UIKeyboardAppearanceAlert];
[txtName setAutocorrectionType:UITextAutocorrectionTypeNo];
[txtName setTextAlignment:UITextAlignmentCenter];
[createNewAlert addSubview:txtName];
[createNewAlert show];
}

Также вы можете ссылаться на следующие два метода, которые вызывают в уведомлениях о клавиатуре.

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


У меня была эта проблема, которая является новой в iOS 4. Я попытался сделать перевод на нем и понял, что это не имеет значения для перевода, только потому, что был вызван перевод.

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

Должен быть обратный вызов, который уволен из перевода, но это устраняет проблему. Он должен действовать так же, как в pre-iOS 4.0.


У меня пока нет подсказки относительно позиционирования предупреждения, но вы можете попробовать отправить resignFirstResponder в свою реализацию textFieldShouldReturn на alertView.

Кроме того, это должно заставить клавиатуру исчезнуть (даже если я точно не знаю почему).


Откройте файл xib, нажмите UIView и убедитесь, что установлен флажок "User Interaction Enabled".


Вот более чистая реализация UIAlertView в сочетании с UITextField: DDAlertPrompt или EGOTextFieldAlertView.

licensed under cc by-sa 3.0 with attribution.