Я использую UIAlertViews для отображения определенных сообщений в приложении, и иногда мое приложение показывает несколько предупреждений. Проблема возникает, когда я пытаюсь получить доступ к границам предупреждений.
Вот код, иллюстрирующий проблему. Это добавлено в совершенно новое приложение View:
- (void)viewDidLoad {
[super viewDidLoad];
[self makeAlert:@"Zero alert" withMessage:@"This is the zero alert"];
UIAlertView *firstAlert = [[UIAlertView alloc] initWithTitle:@"First Alert" message:@"Here is the first alert" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[firstAlert show];
NSLog(@"first alert bounds, origin: %f, %f size: %f, %f",firstAlert.bounds.origin.x,firstAlert.bounds.origin.y,firstAlert.bounds.size.width,firstAlert.bounds.size.height);
[firstAlert release];
UIAlertView *secondAlert = [[UIAlertView alloc] initWithTitle:@"Second Alert" message:@"Here is the second alert" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[secondAlert show];
NSLog(@"second alert bounds, origin: %f, %f size: %f, %f",firstAlert.bounds.origin.x,firstAlert.bounds.origin.y,firstAlert.bounds.size.width,firstAlert.bounds.size.height);
[secondAlert release];
[self makeAlert:@"Third Alert" withMessage:@"Here is the third alert."];
[self makeAlert:@"Fourth Alert" withMessage:@"Here is the fourth alert."];
}
- (void)makeAlert:(NSString *)makeTitle withMessage:(NSString *)makeMessage {
UIAlertView *newAlert = [[UIAlertView alloc] initWithTitle:makeTitle message:makeMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[newAlert show];
NSLog(@"%@ alert bounds, origin: %f, %f size: %f, %f",makeTitle,newAlert.bounds.origin.x,newAlert.bounds.origin.y,newAlert.bounds.size.width,newAlert.bounds.size.height);
[newAlert release];
}
Добавьте описание makeAlert в файл .h и запустите это приложение, и вы увидите проблему в журнале. Нулевое предупреждение будет показывать начало координат 0,0 и соответствующую ширину и высоту (284, 141 на 3 / GS). Все остальные оповещения будут отображать 0,0 для ширины, высоты.
Если вы закомментируете нулевую строку оповещения (сначала [self makeAlert...]
), то firstAlert и secondAlert покажут правильную ширину и высоту, а третье и четвертое оповещения покажут 0,0.
Нет, мое приложение не показывает 4 или 5 предупреждений одновременно. Это всего лишь иллюстрация. Создание оповещения через подпрограмму (или цикл) создает эту ошибку.
У меня есть обходной путь, который включает в себя захват ширины и высоты в первый раз, когда я создаю предупреждение с изображением и помещаю их в некоторые переменные класса, которые я сохранил, чтобы я мог использовать их позже, но это далеко не идеально ( предполагается, что весь текст и изображения будут одинакового размера), и мне также нужно убедиться, что сначала я вызову оповещение с изображением.
Есть мысли о том, почему я получаю 0,0 для ширины, высоты для этих вызовов?