2013-06-24 4 views
0

Для конкретного уведомления сервера я должен показать таблицу UIActionSheet. Но проблема в том, когда это событие приходит, в то же время, если какой-либо UIAlertView уже отображается на любом контроллере представления, он отключает UIActionSheet (после нажатия ok для просмотра предупреждений я не могу ничего выбрать на контроллере просмотра, просмотр отключен, таблицы UIActionSheet). Кто-нибудь сталкивался с такой проблемой, любая идея, как ее решить?Отображение UIActionSheet через UIAlertView

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

Примечание: же проблема не придет для IPod, как это не позволит нажать ОК, прежде чем ответить на UIActionSheet.

ответ

2

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

объявить свойство в .h и синтезировать его

@property (nonatomic, retain) UIAlertView *activeAlertView; 

затем использовать следующий код при попытке показать предупреждение.

if(self.activeAlertView){ 
    [self.activeAlertView dismissWithClickedButtonIndex:0 animated:YES]; 
} 
UIAlertView *localAlert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Your message" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil ]; 
[localAlert show]; 
self.activeAlertView = localAlert; 
[localAlert release]; 

таким образом ваш activeAlertview будет держать ссылку текущего режима просмотра Aler и прежде, чем показать actionSheet отклонить предупредительный вид.

+0

Что делать, если представление предупреждения отображается в одном из контроллеров детского представления ... – Newbee

+0

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

+0

Ya thats мой последний вариант ... Я пытался какие-то другие возможности справиться с этим делом ... Я обновлю любое спасибо. – Newbee

0

Когда приходит сообщение, сначала отметьте, если есть предупреждение.

Показать лист действий после вид предупреждения уволен. В didDismiss... вы можете проверить флаг BOOL, если вам нужно показать лист действий или нет.

+0

Я. Я получил вашу точку зрения, но проблема в том, какой вид предупреждения мне нужно уволить ... Показать родительский контроллер получает событие сервера и отображается лист действий также .. но перед что в любом дочернем представлении диспетчер представлений диспетчера может показать ... как узнать, какой вид предупреждений и как уволить. Нужно ли отправлять сообщение всем дочерним? – Newbee

0

В этом случае, вы должны использовать

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 

метод, а не,

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 

так что ваш код Виль:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
if (buttonIndex == 0) 
{ 
    UIActionSheet *actionSheet = ... 
    [actionSheet showFromTabBar:self.tabBarController.tabBar]; 
} 
} 

Благодаря

+0

Его уведомление о входящем звонке ... Я не могу дождаться, чтобы нажать кнопку ok в UIAlertview, мне нужно показать лист действий, указав высокий приоритет. – Newbee

1

Для Указано, которые alert-view вы должны установить Тег или alert-view.

Ex: -

alertviewName.tag=1; 

Затем вы можете проверить, есть предупреждение вида Open, в частности view-controllersub-views использования сильфона кода, как: -

- (BOOL) doesAlertViewExist { 

     for (UIView* view in yuorviewcontroller.view.subviews) { 
      BOOL alert = [view isKindOfClass:[UIAlertView class]]; 

      if (alert) 
      { 
      return YES; 
      } 

     } 
     return NO; 

} 

После называется этот метод вы получите BOOL значение ДА или НЕТ Если Да, то отклоните его с помощью делегата UIAlertview: -

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex; 

и введите код вашей команды в код didDismissWithButtonIndex.

0

попробовать это: для (UIWindow * ш в [UIApplication sharedApplication] .windows) { для (NSObject * OBJ в w.subviews) { если ([OBJ isKindOfClass: [UIAlertView класс]]) { [(UIAlertView *) obj rejectWithClickedButtonIndex: [(UIAlertView *) obj
cancelButtonIndex] анимированный: ДА]; }} }