iPad UIActionSheet нажмите, чтобы закрыть - состояние UIActionSheet? - PullRequest
2 голосов
/ 08 марта 2012

Я использую ShareKit SHKActionSheet (на основе UIActionSheet) для приложения на iPad:

SHKItem *item = [SHKItem URL:url title:@""];
actionSheet = [SHKActionSheet actionSheetForItem:item];
[actionSheet showFromToolbar:self.navigationController.toolbar];

Я хочу выполнить некоторые действия в зависимости от того, отображается ли actionSheet или нет.Проблема заключается в том, что когда пользователь нажимает на внешнюю ActionSheet, чтобы исключить его из представления (поведение по умолчанию на iPad), actionSheet больше не указывает на допустимый SHKActionSheet и не имеет нулевого значения.Как я могу проверить на такое увольнение?

1 Ответ

2 голосов
/ 08 марта 2012

Класс UIActionSheet имеет свойство visible.Возвращает YES, если лист действий показывает, NO, если это не так.Это должно позволить вам узнать, был ли он отклонен.

Вы также можете реализовать некоторые UIActionSheetDelegate методы, чтобы узнать, когда он был отклонен или отменен, используя actionSheetCancel: и / или actionSheet:didDismissWithButtonIndex:.

РЕДАКТИРОВАТЬ:

Чтобы быть уверенным в получении вызовов делегатов вашего UIActionSheet, обязательно укажите в объявлении интерфейса вашего контроллера (.h):

@interface YourViewController : UIViewController<UIActionSheetDelegate>

@end

Затем в реализации контроллера (.m):

- (void)actionSheetCancel:(UIActionSheet *)actionSheet {

    NSLog(@"action sheet is about to be cancelled");
}

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

РЕДАКТИРОВАТЬ 2:

Я только что посмотрел код SHKActionSheet класс и оказывается, что он не реализует метод actionSheetCancel:, поэтому вы его не получаете.Однако он реализует метод actionSheet:didDismissWithButtonIndex::

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
{
    // Sharers
    if (buttonIndex >= 0 && buttonIndex < sharers.count)
    {
        [NSClassFromString([sharers objectAtIndex:buttonIndex]) performSelector:@selector(shareItem:) withObject:item];
    }

    // More
    else if (buttonIndex == sharers.count)
    {
        SHKShareMenu *shareMenu = [[SHKCustomShareMenu alloc] initWithStyle:UITableViewStyleGrouped];
        shareMenu.item = item;
        [[SHK currentHelper] showViewController:shareMenu];
        [shareMenu release];
    }

    [super dismissWithClickedButtonIndex:buttonIndex animated:animated];
} 

Если вы хотите получать уведомления о методе actionSheetCancel:, просто добавьте его в файл SHKActionSheet.m:

- (void)actionSheetCancel:(UIActionSheet *)actionSheet {

    [super actionSheetCancel:actionSheet];
}

Метод делегата в вашем контроллере будет вызываться правильно:)

Ссылка на класс UIActionSheet

Ссылка на протокол UIActionSheetDelegate

...