В листе действий не отображается кнопка "Отмена" на iPad
На iphone этот код показывает кнопку отмены:
- (IBAction)buttonPressed
{
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"Are you sure?"
delegate:self
cancelButtonTitle:@"No way!"
destructiveButtonTitle:@"Yes, I'm sure!"
otherButtonTitles:nil];
[actionSheet showInView:self.view];
[actionSheet release];
}
Но на iPad появляется только деструктивная кнопка.
В чем проблема?
Ответы
Ответ 1
Я смог решить это, установив actionSheetStyle:
actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
UIActionSheetStyleBlackTranslucent также работает. Я показываю план действий с модального контроллера представления, который, как я полагаю, технически не является "контроллером popover", как указано в рекомендациях, но не видя кнопку "Отмена" в листе действий, выглядит не так, когда она появляется поверх модального представления. Все пользователи видят одну страшную красную кнопку без видимой альтернативы.
Возможно, я смогу изменить контроллер модального представления на контроллер popover, но тогда он не будет модальным, каким он должен быть.
- Обновление -
Ну, это было весело, пока оно продолжалось, но это больше не работает в iOS 4.2.
Я переключился на использование UIAlertView вместо UIActionSheet.
Я больше не получаю прохладную красную кнопку, но она выполняет свою работу.
Ответ 2
Это часть дизайна и ориентиров пользовательского интерфейса. В разделе "Лист действия" они говорят:
Не включайте кнопку "Отмена", потому что люди могут popover, чтобы отклонить лист действий без выбора одного из других альтернативы.
Похоже, что SDK спрятать кнопку для вас специально. Я не уверен, что есть решение, но, возможно, вы можете добавить свою собственную кнопку и установить cancelButtonIndex
для соответствия. Или вы можете переключиться на UIAlertView
.
Ответ 3
В iOS 5 это сработало для меня.
- (void)manualAddModel
{
UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle: @"Select Equipment Type"
delegate: self
cancelButtonTitle: @"Cancel"
destructiveButtonTitle: nil
otherButtonTitles: @"Add Boiler", @"Add Furnace", nil];
popupQuery.actionSheetStyle = UIActionSheetStyleDefault;
[popupQuery addButtonWithTitle:@"Cancel"];
[popupQuery showInView:self.view];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
NSLog(@"Add Boiler");
}
else if (buttonIndex == 1)
{
NSLog(@"Add Furnace");
}
else if (buttonIndex == 2)
{
NSLog(@"Cancel Button Clicked");
}
}
Как правило, нажатие за пределы листа действий будет служить той же цели в iPad.
Ответ 4
Похоже, что в iOS 4.2.1 вы можете вручную добавить свою собственную кнопку Отмена, как обычную кнопку:
[actionSheet addButtonWithTitle:@"Cancel"];
И затем установите:
actionSheet.cancelButtonIndex = <your index>;
Вы не получите красную кнопку отмены, но в зависимости от настройки UIActionSheetStyle
вы получите либо синий, либо черный. В любом случае он довольно четко различим с обычными кнопками и корректно отменяет.
Обратите внимание, что в моем случае я показываю лист действий из контроллера popover, ваши результаты могут отличаться в других сценариях.
Ответ 5
У меня была такая же проблема, когда я попытался показать ActionSheet в представлении, который был под другим модальным видом, например. вид был невидимым. Хотя представление не было нулевым, оно выглядит так глубоко, что это значит, когда оно не отображается.
Я решил проблему, установив другое свойство UIModalPresentationStyle modalPresentationStyle
, чтобы представление стало видимым.
view.modalPresentationStyle = UIModalPresentationFormSheet;
Ответ 6
В соответствии с стандартом iOS. Кнопка "Отмена" не отображается в таблице UIActionSheet при отображении в iPad, так как UIActionSheet можно отменить (Скрыть), просто нажав любую область вне области ActionSheet. В случае iPhone UIActionSheet будет содержать кнопку "Отмена".
Обратитесь к этой ссылке для получения дополнительной информации Кнопка отмены UIActionSheet в iPad