Просмотр заблокирован после UIActionSheet или UIAlertView (iPhone/iPad)

У меня возникают некоторые проблемы с UIAlertView или UIActionSheet крадущими фокус и не отпускающими.

Чтобы уточнить, у меня есть настройка, при которой пользователь нажимает кнопку. Затем отображается UIAlertView с UITextField. Когда пользователь нажимает кнопку "Ok", отображается UIActionSheet вызывается из метода делегата UIAlertView), подтверждающий что-то с пользователем. Однако, когда они нажимают одну из кнопок, UIActionSheet уходит, но фокус не возвращается к основному виду.

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

Пожалуйста, кто-нибудь может мне помочь?

Вот исходный код:

// This method displays the UIAlertView which contains a UITextView linked up to a
// UIPickerView.
- (********)buttonPressed:(id)sender
{
 UIAlertView *deleteAlert = [[UIAlertView alloc] initWithTitle:@"Delete Something" 
 message:@"Select something to delete:" 
 delegate:self 
 cancelButtonTitle:@"Cancel" 
 otherButtonTitles:@"Ok", nil];
 deleteAlert.alertViewStyle = UIAlertViewStylePlainTextInput;
 deleteAlert.tag = kDeleteAlert;
 deleteTextField = [deleteAlert textFieldAtIndex:0];
 [pickerView reloadAllComponents];
 deleteTextField.inputView = pickerView;
 [deleteAlert show];
}


// The UIAlertView delegate method is then used to display a UIActionSheet to confirm
// whether the user wants to proceed.
- (void) alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex
{
 UIActionSheet *confirmDelete = [[UIActionSheet alloc] initWithTitle:@"Delete blah?" 
 delegate:self 
 cancelButtonTitle:@"No" 
 destructiveButtonTitle:@"Yes" 
 otherButtonTitles:nil];
 confirmDelete.actionSheetStyle = UIActionSheetStyleBlackOpaque;
 [confirmDelete showInView:self.parentViewController.tabBarController.view];
}

// Then the focus should be returned to the original view (i.e. where the first button
// was pressed to launch the UIAlertView. However the focus is still locked and the
// view appears slightly dimmed around the edges.
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{
 if (buttonIndex == actionSheet.destructiveButtonIndex) 
 {
 // Do some stuff ...
 }
}
2 ответа

Я думаю, что ваша проблема связана с тем, что предупреждение alertAlert не отменяется при вызове actionSheet.

Я звучу для меня, как вид предупреждения все еще имеет фокус, но находится в неизвестном состоянии, потому что он не был уволен, но вы что-то сделали с ним нажатием кнопки.

Предположительно, вы хотите отклонить представление предупреждения, когда представлен лист действий? Затем, когда лист действия отклоняется, вы возвращаетесь к основному виду? Итак, заказ, который вы хотите:

1) Представление предупреждения

2) Если нажата кнопка в представлении предупреждения, она уведомляет об этом делегата с помощью - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

3) Отключите alertView - (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated и представим лист действий.

3) Когда используется лист действия, он вызывает его метод делегирования - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex и внутри этого метода, отклоняет его или что-то еще, что вам нужно сделать.

Вы бы поместили все эти методы делегата в свой исходный контроллер просмотра вызовов, соответствующий ему в .

Вам нужно будет сделать исходный диспетчер представлений делегатом представления предупреждения и панель действий при их создании. Я надеюсь в этом есть смысл.

Дополнительная информация http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html


Я бы сказал, что, вероятно, b/c вы не уходите с первого ответчика на UITextField который находится внутри UIAlertView. Убедитесь, что перед тем, как вы покажете свой UIActionSheet

[myTextField resignFirstResponder];

licensed under cc by-sa 3.0 with attribution.