27 Jan, 2011 20:31
UIAlertView x UIWindow
- (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é!