Проблем със скриване/показване на клавиатурата в iPhone 5c

От последните няколко дни се сблъсквам със странен keyboard проблем, който се случва само в iPhone 5c.

Използвам objective-C за разработка в Xcode-6.4

Моята цел за околната среда е ios7.

Ето как се справям с keyboard Notification.

 - (void)viewDidAppear:(BOOL)animated{

[super viewDidAppear:animated];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

}

До Deregister Notification пиша тази част от кода. За да съм сигурен, използвам -resignFirstResponder за всяко текстово поле.

- (void)viewWillDisappear:(BOOL)animated{

[super viewWillDisappear:animated];

[self hideKeyBoard];
[self.view endEditing:YES];

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}


- (void)hideKeyBoard{

[kAgeTextField resignFirstResponder];
[kSchoolTextField resignFirstResponder];
}

И в бутона за изпращане съм проверил някакво условие и след това показвам AlertView.

- (IBAction)submitClicked:(id)sender
{
if(validated)
 {    
    [self.view endEditing:YES];
    [self hideKeyBoard];
    [self.view resignFirstResponder]; 

    [self makeApiCall];
 }
}

Сега, когато получа отговор за успех/неуспех от сървъра, правя това. Това е блокът, който се изпълнява след получаване на отговор от сървъра:

-(void)SuccessfulWithServerInfo:(id)responseInfo
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
dispatch_async(dispatch_get_main_queue(),^{
    [appDelegate hideProgressViewFromView:self.view];
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"Thanks for coming" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
    [self.navigationController popToRootViewControllerAnimated:YES];


});

}

Проблем Когато получа alertBox и натисна OK. След това клавиатурата се отваря и затваря автоматично. Това се случва само с iPhone 5C. Проверих го в 4s, 5s, 6 и 6Plus. Всички работят добре.

Ако някой знае за това, моля да помогне.


person Dalvik    schedule 02.12.2015    source източник


Отговори (2)


Показвате предупреждение в същото време, когато правите и popToRootViewController. Може това да създаде проблем.

  1. Показване на предупреждение.
  2. Обработка на метода за изглед на предупреждение.
  3. Напишете [self.navigationController popToRootViewControllerAnimated:YES] в метода на изгледа за предупреждение.

    [UIAlertView showWithTitle:@"" message:@"Thanks for coming" cancelButtonTitle:@"OK" otherButtonTitles:nil] alertViewStyle:UIAlertViewStyleDefault tapBlock:^(UIAlertView *alertView, NSInteger buttonIndex, NSString *text)
     {
         if(buttonIndex == 1)
         {
             [self.navigationController popToRootViewControllerAnimated:YES]; 
         }
    }];
    

Надявам се това да ви помогне.

person Ekta Padaliya    schedule 02.12.2015
comment
без промяна,,,Всичките ми текстови полета са в табличен изглед...ще има проблем с честотата на изглед на таблицата - person Dalvik; 02.12.2015
comment
Този tableview е на същия viewcontroller, където се показва alertview? - person Ekta Padaliya; 02.12.2015

След известно проучване намерих този отговор в stackOverflow.

Това е известна промяна в поведението на AlertView в ios7 и в ios8.

Използвам този код, за да разреша проблема си:

[self performSelector:@selector(showAlertView) withObject:nil afterDelay:0.6];

За подробен отговор, моля, вижте този SO отговор

person Dalvik    schedule 03.12.2015