Intereting Posts
как настроить цвет панели навигации на IOS 6/7 Сортировка номеров с индексами Сертификат разработчика Apple на нескольких компьютерах, одна отдельная учетная запись разработчика Как я могу изменить язык отображаемой UIKeyboard из моего iPhone-приложения? Есть ли способ написать тесты пользовательского интерфейса для принудительного нажатия на приложение iOS? Загрузка двоичного файла с помощью RestKit 0.20.x iOS – Загрузка пользовательской ячейки таблицы приводит к ошибке при второй загрузке Конфигурирование разрешений и общих ресурсов для нескольких пользователей Когда объект-C вызывает cellForRowAtIndexPath? Доступ к переменной, недоступной Swift Передайте NSManagedObject из одного класса в другой класс на языке Swift Programming? Использование масонства для макета 9 баллов как загрузить NSData в UIWebView без создания двоичного файла Изображение во весь экран Получить BLACK фото при захвате с помощью AVFoundation

Прогресс HUD не отображается на правильном контроллере View

Я использую класс SVProgressHUD ( https://github.com/samvermette/SVProgressHUD ), и у меня есть главный контроллер просмотра с кнопкой на нем, которая подключается с помощью нажатия segue с другим контроллером представления. В контроллере Main View я добавил этот код:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { [SVProgressHUD showWithStatus:@"Loading"]; NSLog(@"segue test"); } 

Я хочу, чтобы до того, как загрузился другой контроллер View, HUD нужно отобразить. Если я запустил свою программу, она сначала распечатывает «тест segue» NSLog, и после этого он выводит NSLogs из другого контроллера просмотра, проблема в том, что HUD не работает непосредственно при нажатии кнопки, она показывает, когда другая Контроллер просмотра загружен …

Это то, что у меня есть сейчас:

http://i47.tinypic.com/jphh0n.png

http://i50.tinypic.com/vzx16a.png

Это то, что мне нужно:

http://i45.tinypic.com/2vcb1aw.png

И, несмотря на то, что синий экран загружается, «Идет» «Идет» ИДУ должен исчезнуть.

Вместо подключения segue непосредственно от кнопки вы можете подключить segue из класса контроллера вида. Убедитесь, что вы дали segue имя, потому что вам нужно это имя, чтобы вы могли его назвать позже.

Затем вы можете сначала подключить свою кнопку к IBAction , которая сначала загрузит то, что вы загружаете. По завершении загрузки вы можете отменить прогресс HUD и вызвать segue.

 - (IBAction)loadStuff:(id)sender { [SVProgressHUD showWithStatus:@"Loading"]; [self retrieveStuff]; } - (void)retrieveStuff { // I'll assume you are making a NSURLConnection to a web service here, and you are using the "old" methods instead of +[NSURLConnection sendAsynchronousRequest...] NSURLConnection *connection = [NSURLConnection connectionWith...]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { // Do stuff with what you have retrieved here [SVProgressHUD dismiss]; [self performSegueWithIdentifier:@"PushSegueToBlueScreen" sender:nil]; } 

Если вы просто хотите сначала смоделировать то, что произойдет, вы можете попробовать следующее:

 - (IBAction)loadStuff:(id)sender { [SVProgressHUD showWithStatus:@"Loading"]; [self retrieveStuff]; } - (void)retrieveStuff { [NSTimer scheduledTimerWithTimeInterval:2 // seconds target:self selector:@selector(hideProgressHUDAndPush) userInfo:nil repeats:NO]; } - (void)hideProgressHUDAndPush { // Do stuff with what you have retrieved here [SVProgressHUD dismiss]; [self performSegueWithIdentifier:@"PushSegueToBlueScreen" sender:nil]; } 

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

 - (IBAction)loadStuff:(id)sender { [SVProgressHUD showWithStatus:@"Loading"]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // ... download image here [UIImagePNGRepresentation(image) writeToFile:path atomically:YES]; dispatch_sync(dispatch_get_main_queue(), ^{ [SVProgressHUD dismiss]; [self performSegueWithIdentifier:@"PushSegueToBlueScreen" sender:nil]; }); }); }