Подтвердить что ты не робот

Как сделать uiactionsheet упущенным, когда вы нажимаете наружу, например, над ним?

Как я могу отключить uiactionsheet, когда вы нажимаете наружу, например, над ним? Это для iPhone. По-видимому, ipad делает это по умолчанию (возможно, я ошибаюсь).

4b9b3361

Ответ 1

Хорошо получилось решение. Следующее относится к подклассу UIActionSheet

// For detecting taps outside of the alert view
-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer {
    CGPoint p = [gestureRecognizer locationInView:self];
    if (p.y < 0) { // They tapped outside
        [self dismissWithClickedButtonIndex:0 animated:YES];
    }
}

-(void) showFromTabBar:(UITabBar *)view {
    [super showFromTabBar:view];

    // Capture taps outside the bounds of this alert view
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)];
    tap.cancelsTouchesInView = NO; // So that legit taps on the table bubble up to the tableview
    [self.superview addGestureRecognizer:tap];
    [tap release];
}

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

Ответ 2

он может быть вам полезен Использование:

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

предыдущий вопрос

Ответ 3

Я думаю, что вы ищете этот метод

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

ИЗМЕНИТЬ

вы можете использовать это в своем объекте action sheet, и он работает просто отлично, но вы не можете регистрировать событие вне этого листа, например, выделенную часть

может быть, если вы используете UITapGestureRecognizer на вашем контроллере просмотра, чем это могло бы сделать трюк.

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(nothing)];
[actionSheet addGestureRecognizer:recognizer];

Ответ 4

После установки свойства cancelButtonIndex в файле UIActionSheet с допустимым значением, нажатие на внешнюю сторону приведет к отказу от UIActionSheet. Я пробовал в iOS 9. Однако, если этот cancelButtonIndex не установлен равным неправильному значению (например, индекс за пределами общего количества кнопок в UIActionSheet), ничего не произойдет, когда выходите наружу.

Ответ 5

Нет необходимости в жесте жесты. Просто используйте действие UIAlertActionStyleCancel.

Ответ 6

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

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

Ответ 7

Это точно не отвечает на вопрос, но вот что я делаю, чтобы закрыть сборщик при нажатии на один из его элементов (это предотвращает добавление дополнительной кнопки "done" или "снаружи" ):

Внедрите метод делегата viewForRow, в котором вы создаете UILabel и возвращаете его:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

На этих пользовательских ярлыках строк добавьте обработчик действий по нажатию:

UITapGestureRecognizer *tapAction = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClick:)];
[label addGestureRecognizer:tapAction];

В обратном вызове handleClick отпустите открытый лист (тот, который содержит представление выбора):

[pickerSheet dismissWithClickedButtonIndex:0 animated:TRUE];

Ответ 8

Используйте showFromRect, например:

UIView *barButtonView = [barButtonItem valueForKey:@"view"];
CGRect buttonRect = barButtonView.frame;

[actionSheet showFromRect:buttonRect inView:self.view animated:YES];

Ответ 9

в iOS7 Я добавляю dismissWithClickedButtonIndex msg в gestureRecognizerShouldBegin, и он работает.

Ответ 10

Используйте .cancel UIAlertActionStyle в качестве опции.