UIActionSheet Отклонить, когда нажмите / нажмите снаружи - PullRequest
4 голосов
/ 13 сентября 2011

Я новичок в разработке iPhone.Может кто-нибудь сказать мне, как отклонить элемент управления UIActionSheet, когда я нажал за его пределами?

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

Ответы [ 6 ]

13 голосов
/ 01 октября 2015

Еще более простым решением было бы просто добавить кнопку Отмена. Это автоматически включит фоновый сигнал к увольнению: (Swift)

alertController.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
6 голосов
/ 03 февраля 2013

Попробуйте эту магию:

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)];
    tap.cancelsTouchesInView = NO;
    [actionSheet.window addGestureRecognizer:tap];
    [tap release];

И этот метод:

-(void)tapOut:(UIGestureRecognizer *)gestureRecognizer {
    CGPoint p = [gestureRecognizer locationInView:self.actionSheet];
    if (p.y < 0) {
        [self actionPickerDone:nil];
    }
}
0 голосов
/ 01 октября 2013

согласно IOS 6, вы можете реализовать это следующим образом:

  1. проверьте buttonIndex (запускайте ваши вещи, только если buttonIndex> = 0). Нажатие на внешнюю панель действий приведет к тому, что buttonindex = -1.
  2. реализовать didDismissWithButtonIndex

Обратите внимание, что это работает только после реализации UIActionSheetDelegate.

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"action sheet was dismissed");
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    //if user click outside the action sheet, button index will be -1
    if(buttonIndex>0)
    {
        NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
    }
}
0 голосов
/ 28 мая 2013

добавить панель инструментов с кнопкой к sismiss datePicker и actionSheet

toolbarPicker = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        toolbarPicker.barStyle=UIBarStyleBlackOpaque;
        [toolbarPicker sizeToFit];
        NSMutableArray *itemsBar = [[NSMutableArray alloc] init];
        //calls DoneClicked
        UIBarButtonItem *bbitem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(DoneClicked)];
        [itemsBar addObject:bbitem];
        [toolbarPicker setItems:itemsBar animated:YES];

        [menu addSubview:toolbarPicker];

и добавить эти действия для кнопки "Готово"

-(BOOL)closeDatePicker:(id)sender{
[menu dismissWithClickedButtonIndex:0 animated:YES];
[txtDate resignFirstResponder];

return YES;

}

// действие по завершениинажата кнопка - (IBAction) DoneClicked {[self closeDatePicker: self];menu.frame = CGRectMake (0, 44, 320, 416);

}

0 голосов
/ 04 октября 2011

У меня есть совет, чтобы вы создали прозрачную кнопку и сделали ее такой же, как ваш вид, и отправили ее обратно. Создайте метод отклонения листа действий и подключите его с помощью большой кнопки. Я никогда не пробовал этого, но думаю, что стоит попробовать, потому что если это сработает, вы можете настроить его как общий метод в своем представлении, чтобы отклонять клавиатуру, когда пользователь нажимает за пределами текстового поля (согласно HIG), а также UIActionSheet.

Однако я не знаю, уместно ли отклонять UIActionSheet так же, как popover. Разве лист действий не требует некоторого ввода, несмотря ни на что? В противном случае, почему Apple предоставляет вам кнопку отмены?

...