После 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];
    }
}
Другие вопросы по тегам