NSRunLoop проблема синхронизации - PullRequest
0 голосов
/ 23 февраля 2011

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

Я подумал, что смогу сделать это, добавив список в качестве подпредставления в UIAlertView и сохранить отображение UIalertView с помощью NSRunLoop в цикле while, который появляется с флагом, установленным списком выбора. Однако я не могу заставить это работать, потому что флаг не устанавливается до того, как цикл while возвращается в NSRunLoop. Второе нажатие заставит его выпасть из цикла while, но это не то, что я хочу.

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex{
   CGRect popUpPickerFrame = alertView.frame;
   PopUpPicker *popUpPicker = [[PopUpPicker alloc] initWithFrame:CGRectMake(popUpPickerFrame.origin.x +150,popUpPickerFrame.origin.y-50,115,250)];
   popUpPicker.delegate = self;
   popUpPicker.aList = [NSArray arrayWithObjects:@"General Plan", @"Light Plan", @"Melatonin Plan", @"Bed Times", @"Done", nil];
   popUpPicker.tag = 10;
   [alertView addSubview:popUpPicker];

   while (popUpPicker.tag == 10) {
       [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode 
                             beforeDate:[NSDate distantFuture]];
   }
   [popUpPicker release];
}

Я устанавливаю popUpPicker.tag для строки, которую пользователь нажимает в tableView: didSelectRowAtIndexPath: метод списка, который затем вызывает метод делегата списков.

Я могу заставить всплывающий список работать нормально, но только после закрытия UIAlertView.

Спасибо за любую помощь.

Джон

1 Ответ

0 голосов
/ 24 декабря 2011

Ваш рабочий процесс не применим к концепции UIAlertView.Он не предназначен для предоставления выбора в списке после нажатия какой-либо кнопки.Кто-то на WWDC 2011 сказал: «Не борись с рамками».Этот совет только для вас.Избегайте предупреждений, за исключением случаев, когда они действительно необходимы, рассмотрите возможность использования таблиц действий для своей задачи или реализуйте рабочий процесс в ViewController.

...