BLOG
FILTROS
TAGS MAIS USADAS
UIAlertView x UIWindow
-
AUTOR
Karin
TAGs desenvolvimento, iphone sdk
0 COMENTÁRIOS-
Tweet
Olá pessoal. Hoje vou dividir com vocês uma experiência que tive em um projeto da Mobits.
No nosso projeto, criamos uma view que era adicionada na window da seguinte forma:
[[[UIApplication shareApplication] keyWindow] addSubview:self];
Durante boa parte do desenvolvimento, usar a keyWindow não apresentava nenhum problema. Porém, em um determinado momento, percebemos que quando adicionávamos essa view no delegate do UIAlertView, simplesmente ela aparecia durante um tempo e depois sumia.
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1)
[minhaView exibir];
}
Fizemos vários testes para saber o porquê da view sumir. Testamos para ver se realmente a view continuava adicionada, testamos se ninguém escondia a view, e vários outros testes. Todos mostravam que a view estava ali, não escondida (ou seja, hidden = NO), porém não visível na tela.
Aí, tivemos a ideia de testar fora do delegate da UIAlertView. Simplesmente funcionou! A view não sumia mais. Então estava óbvio que o problema era adicionar a view na window dentro do delegate.
Voltamos a adicionar a view no delegate, contudo, mandamos imprimir quais windows existiam no projeto. E para a nossa supresa, vimos que a UIAlertView possuia a sua própria window, ou seja, quando adicionávamos a view na keyWindow, nesse momento ela apontava para a window da UIAlertView e não da aplicação, como desejávamos. Era por isso que a view sumia.
Depois disso, forçamos a adição da view na window da aplicação dentro do delegate e funcionou!
@implementation MinhaView
- (void)exibir {
if (self.windowPadrao)
[self.windowPadrao addSubView:self];
else
[[[UIApplication shareApplication] keyWindow] addSubview:self];
}
@end
// A chamada da view
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
minhaView.windowPadrao = self.window;
[minhaView exibir];
}
}
Fica aí a dica para que desenvolvedores não passem pelo mesmo problema que passamos aqui. Até!





+55 21 3553-1898