С последним выпуском iOS 8.3 наше приложение начинает иметь странное поведение.
После завершения редактирования текстового поля пользователь может нажать кнопку закрытия, которая вызывает UIAlertView
. Когда пользователь нажимает кнопку "Отбросить" в окне alertview, предупреждение и текущее представление отклоняются. Но почему-то клавиатура появляется после исчезновения представления, что очень раздражает пользователей.
После некоторой отладки кажется, что клавиатура показана для последнего текстового поля, к которому пользователь обратился, прежде чем закрывать представление. Я пробовал различные способы endEditing
для текущего представления во многих местах (перед показом UIAlertView
, после нажатия кнопки в UIAlertView
, я даже установил фокус на другой элемент пользовательского интерфейса представления). Это не решило проблему.
Но для этой конкретной проблемы я не уверен, что это общая проблема или что-то, что нам нужно исправить. Все работает отлично до iOS 8.3.
Мы понимаем, что UIAlertView
устарел для iOS 8. Мы начинаем мигрировать в UIAlertController
. Но если есть какое-то обходное решение, нам бы хотелось услышать.
Вот фрагмент кода.
- (IBAction)closeTapped:(UIButton *)sender
{
// try to resign first responder
// [self.tfName resignFirstResponder];
// [self.tfPosition resignFirstResponder];
[self.view endEditing:YES];
if(self.orderDetails.isOpen && self.orderItemChanged)
{
UIAlertView* saveAlert = [[UIAlertView alloc] initWithTitle:@"Unsaved Changes"
message:@"Your changes have not been saved. Discard changes?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Save", @"Discard", nil];
[saveAlert show];
}
else
{
[self close];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch(buttonIndex)
{
case 1: // Save
{
[self save];
break;
}
case 2: // Discard
{
[self close];
break;
}
}
}
- (void)close
{
[self.delegate dismissEditOrderItemVC];
}