После iOS 8.1 на всех устройствах ScrollView движется вверх и не прокручивается при нажатии на кнопку отмены alertview
У меня есть экран входа в систему, где есть два текстовых поля для имени пользователя и пароля. Когда электронная почта неверна, я перемещаюсь по клавиатуре и показываю соответствующее предупреждение для пользователя. Когда я нажимаю кнопку отмены просмотра предупреждений, представление предупреждений исчезает, а представление прокрутки идет вверх. Эта проблема возникает только на устройствах после iOS 8.1. На iOS 8.1 и ранее работает нормально. Я не понимаю, какова точная причина? Ниже приведен код
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
if (txtActiveField == txtUsername) {
[txtPassword becomeFirstResponder];
}
else if (txtActiveField == txtPassword) {
[txtPassword resignFirstResponder];
//[self loginViaEmail:self];
[self performSelector:@selector(loginViaEmail:) withObject:btnLogin afterDelay:0.0];
}
return YES;}
-(IBAction)loginViaEmail:(id)sender{
//[txtActiveField resignFirstResponder];
if ([[txtUsername.text stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]] length] == 0)
{
[AppDelegate showWithTitle:title message:@"Please enter Username/Email for your account"];
}
else if ([txtPassword.text length] < 6)
{
if([[txtPassword.text stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]] length] == 0)
[AppDelegate showWithTitle:title message:@"Please enter Password"];
else
[AppDelegate showWithTitle:title message:@"Password contain minimum 6 characters"];
}
#pragma mark Show alert with message
+(void)showWithTitle:(NSString *)title message:(NSString *)msg
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
1 ответ
Я думаю, что это проблема с Alert view. Начиная с iOS 8, AlertViewController поставляется вместо представления предупреждений. Попробуйте использовать приведенный ниже код, который отлично работает на iOS 8.4 и ниже
if (IS_OS_8_OR_LATER) {
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:title message:msg preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction *action)
{
}];
[alertVC addAction:cancelAction];
[[[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController] presentViewController:alertVC animated:YES completion:^{
}];
}
else{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:msg delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}
}