2013-09-30 3 views
0

Этот вопрос относится к родной функции iOS отображения таблиц действий и popovers, когда номер телефона или адрес электронной почты выбран в веб-виде/текстовом виде с iPad. Если вам требуется обновить, на листе действий находятся две кнопки, которые читаются «Добавить в контакты» и «Копировать». Где popover, о котором я говорю, это то, что отображается, когда пользователь выбирает кнопку «Добавить в контакты».Отключить родной UIActionsheet и UIPopover в iPad

Я понимаю, что уволить поповер один заявляет:

[somePopoverController dismissPopoverAnimated:YES]; 

Чтобы уволить actionsheet, можно просто позвонить:

[someActionSheet dismissWithClickedButtonIndex:0 animated:YES]; 

Однако, моя проблема заключается в том, что поскольку IOS создали эти actionsheets/popovers для меня, я не владею ими и не могу ссылаться на них, чтобы вызвать методы увольнения.

Вариант использования Почему я должен это делать, потому что мое приложение будет регистрировать пользователя после определенного времени бездействия. Когда пользователь выходит из системы, эти таблицы действий/popovers все еще остаются на экране, хотя я ввел новый контроллер представления и удалил старые.

Кто-нибудь знает, как я могу ссылаться на эти popovers и таблицы действий, которые у меня нет? Любой совет будет очень благодарен!

ответ

1

Ну, я нашел решение отклонить как UIActionSheets, так и popover, созданный за m Webviews/Textviews при обнаружении телефонных номеров/электронной почты на iPad. Решение в основном повторяется во всех моих представлениях, используя рекурсию, пока не найду мнения, которые я хочу отклонить. Большое спасибо, чтобы ответить на ответы, которые я нашел в этом сообщении Accessing UIPopoverController for UIActionSheet on iPad.

Чтобы удалить UIActionSheets:

BOOL IsActionOpen(UIView* aView) { 
    BOOL actionOpen = NO; 
    if (aView) { 
     if ([aView isKindOfClass:[UIActionSheet class]]) { 
      actionOpen = YES; 
      [(UIActionSheet *)aView dismissWithClickedButtonIndex:0 animated:NO]; 
     } 
     else if (aView.subviews.count > 0) { 
      for (UIView* aSubview in aView.subviews) { 
       if (IsActionOpen(aSubview)) { 
        if ([aView isKindOfClass:[UIActionSheet class]]) { 
         actionOpen = YES; 
         [(UIActionSheet *)aView dismissWithClickedButtonIndex:0 animated:NO]; 
        }break; 
       } 
      } 
     } 
    } 
    return actionOpen; 
} 

- (void) removeActionSheetIfShowing { 
    BOOL actionOpen = NO; 
    for (UIWindow* w in [UIApplication sharedApplication].windows) { 
     actionOpen = IsActionOpen(w); 
     if (actionOpen) 
      break; 
    } 
} 

, чтобы удалить поповер, который создается при выборе «Добавить в контакты» кнопки из сгенерированного UIActionSheet:

BOOL IsPopOverOpen(UIView* aView) { 
    BOOL popOverOpen = NO; 
    if (aView) { 
     //popover is a popoverview, not a popovercontroller. We find it by checking if UIPopoverBackgroundView exists 
     if([aView isKindOfClass:[UIPopoverBackgroundView class]]){ 
      popOverOpen = YES; 
      [aView.superview removeFromSuperview]; 
     } 
     else if (aView.subviews.count > 0) { 
      for (UIView* aSubview in aView.subviews) { 
       if (IsPopOverOpen(aSubview)) { 
        if([aView isKindOfClass:[UIPopoverBackgroundView class]]){ 
         popOverOpen = YES; 
         [aView.superview removeFromSuperview]; 
        }break; 
       } 
      } 
     } 
    } 
    return popOverOpen; 
} 

- (void) removePopOverIfShowing { 
    BOOL popOverOpen = NO; 
    for (UIWindow* w in [UIApplication sharedApplication].windows) { 
     popOverOpen = IsPopOverOpen(w); 
     if (popOverOpen) 
      break; 
    } 
} 
0

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

@property (strong, nonatomic) UIActionSheet *myActionSheet; 

Затем, когда вы на самом деле создать actionsheet, вы

self.myActionSheet = [[UIActionSheet alloc] initWithTitle:myTitle 
               delegate:self 
             cancelButtonTitle:cancelButtonTitle 
            destructiveButtonTitle:destButtonTitle 
             otherButtonTitles:otherButtonTitle, nil]; 

[self.myActionSheet showFromBarButtonItem:sender animated:YES]; 

И когда вам нужно уволить это вы просто делаете

[self.myActionSheet dismissWithClickedButtonIndex:0 animated:YES]; 
+0

Спасибо за ответ, но я не подумайте, что ваш ответ мне поможет. Проблема в том, что я никогда не создавал лист UIAction в коде. Листок действий «волшебным образом» построен для меня iOS, просто имея адрес электронной почты/номер телефона в webview/textview. – bmjohns

+0

Ооо, хорошо, теперь я понимаю, что вы имеете в виду – micantox

Смежные вопросы