Ответ 1
Его ошибка ios 8..
Поскольку @rob говорит, что UIActionSheet
устарел в iOS 8. (UIActionSheetDelegate также устарел.)
Чтобы создать и управлять листами действий в iOS 8 и более поздних версиях, используйте UIAlertController
В делегатах ios8 методы вызова UIActionSheet несколько раз
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
Я проверил ipad 2 с IOS 8
Его ошибка ios 8..
Поскольку @rob говорит, что UIActionSheet
устарел в iOS 8. (UIActionSheetDelegate также устарел.)
Чтобы создать и управлять листами действий в iOS 8 и более поздних версиях, используйте UIAlertController
Это действительно текущее поведение, о котором я видел в нескольких местах. Кажется, это ошибка, и, надеюсь, скоро будет исправлено, но не знаю наверняка.
Вы должны UIAlertController заменить все AlertView и ActionSheet в iOS8. Если ваша цель ниже iOS8, вам следует проверить версию и добавить еще код
Например, этот код предназначен для iOS8 ActionSheet
-(void)testActionSheet{
UIAlertController* alertAS = [UIAlertController alertControllerWithTitle:@"Test ActionSheet"
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"Action" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
NSLog(@"Action");
}];
[alertAS addAction:defaultAction];
UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
}];
[alertAS addAction:cancleAction];
[self presentViewController:alertAS animated:YES completion:nil];
}
Если вы хотите продолжать использовать существующий API, есть немного поведения, которое позволяет вам знать, когда запускать ваш код и когда игнорировать вызов делегата - buttonIndex
.
При первом вызове методов делегата они всегда передают правильный buttonIndex
. Во второй раз, однако, они вызываются с помощью кнопки buttonIndex
кнопки отмены.
К сожалению, UIActionSheet устарел в iOS 8: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIActionSheet_Class/
У меня была такая же проблема. Один обход: используйте actionSheet.tag
. Установите его на допустимое число (по умолчанию оно будет 0), например 1, 2,... при создании экземпляра. Обработать ответ в:
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
Проверьте, действительно ли это (ex: не -1 перед его обработкой). Как только реакция будет обработана здесь, перед возвратом установите:
actionSheet.tag = -1;
Это гарантирует, что вы его проигнорируете, хотя второй вызов сделан. Это работает в моем случае.
Я хотел бы добавить: UIAlertController - это правильный способ использовать UIAlertViews в iOS8.0 + (поскольку UIAlertView устарел), однако ошибка в возможности выбора нескольких параметров несколько смягчена.
Отдельные параметры в представлении оповещения могут быть выбраны/выделены одновременно, но метод делегата только запускает один из них. Какой из них действительно срабатывает, не определено, но я могу подтвердить, что только один из них выключен, несмотря на то, что два или более выделены, если вы используете несколько пальцев.