Можно ли получить доступ к UIAlertView с помощью тега? - PullRequest
1 голос
/ 03 января 2011

Я надеюсь получить доступ к UIAlertView, используя тег.Коды показаны ниже

UIAlertView *a=(UIAlertView *)[self.view  viewWithTag:presetTag]; 

, но объект не возвращает (0x0)

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

Пример, который может пригодиться, если я хочу скрыть предупреждениепросмотр основан на каком-то другом событии, которое не касается одной из кнопок в окне предупреждений.Скажем, сервер информирует приложение о том, что предупреждение больше не действует, и поэтому я отклоняю его кнопкой индекса -1 в представлении предупреждений.Но у меня нет ссылки на это предупреждение, так как я могу его найти?

Приветствую любой комментарий

Спасибо

interdev

Ответы [ 4 ]

4 голосов
/ 16 сентября 2011

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

Что-то вроде:

UIStateAlertView *alert = [[UIStateAlertView alloc]
                           initWithTitle:@"my_message"
                           message:nil
                           delegate:self
                           cancelButtonTitle:@"Cancel"
                           otherButtonTitles: nil];
alert.tag = kMY_TAG;
[_alertIndex setObject:alert forKey:[NSNumber numberWithInt:kMy_TAG]];
[alert show];
[alert release];

для извлечения предупреждения:

UIAlertView *alert = [_alertIndex objectForKey:[NSNumber numberWithInt:kMy_TAG]];

Когда вы закончите с представлением, обязательно удалите его из словаря:

[_alertIndex removeObjectForKey:[NSNumber numberWithInt:kMy_TAG]];

_alertIndex является NSMutableDictionary

iPhone SDK: проверьте, показывает ли UIAlertView , предоставляет ли решение, однако это зависит от того, как Apple делает свое внутреннее дело и может сломаться в любой момент; и так следует избегать

2 голосов
/ 16 сентября 2011

UIAlertView создает свой собственный UIWindow, который не является частью основной иерархии вашего приложения UIView s.Поэтому его невозможно найти с помощью [UIView viewWithTag:].

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

Есть способдля доступа к UIAlertView s в вашем приложении (и затем вы можете использовать теги, чтобы убедиться, что это именно то, что вы ищете), но оно зависит от внутренней структуры приложения и поэтому может перестать работать в будущих версиях iOSхотя вряд ли.Если вы заинтересованы, пожалуйста, см. Этот другой ответ SO .

0 голосов
/ 03 января 2011

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

0 голосов
/ 03 января 2011

Это то, что вам нужно?В частности, вы можете получить доступ к каждой информации тега UIAlertView через его свойство tag в методах обратного вызова протокола.

...