presentModalViewController не отображается - PullRequest
0 голосов
/ 06 сентября 2011

Начнем с того, что я новичок в мире Objective C, поэтому мой вопрос может показаться наивным.Даже структурирование методов может быть не совсем правильным, так что будьте добры со мной.Я уверен, что я буду учиться по мере продвижения вперед.

У меня есть контроллер представления контейнера " DeckViewController ", в котором находится другой контроллер представления " CardDetails ". CardDetails имеет вид прокрутки, который используется для загрузки 3 пользовательских UIViews (CustomWebView) одновременно, в которые загружается HTML.HTML-код, загруженный в эти представления, содержит изображения, и требование состоит в том, что, как только пользователь нажимает на любое изображение на странице, он открывается в QLPreviewController .Я завернул все изображения в HTML в тег привязки, чтобы делегат shouldStartLoadWithRequest обрабатывал загрузку этого изображения.

Этот обработчик записан в классе CustomWebView, и я пытаюсь загрузить контроллер предварительного просмотра.используя родительский контроллер представления CustomWebView, то есть CardDetails .

Я проследил код, и он выдает правильные значения, но кое-что, как модальный контроллер представления вообще не подходит.Я мог просто пропустить небольшую ссылку или пропустить весь смысл здесь.Буду очень признателен за помощь и руководство.

Фрагмент кода для обработчика делегатов shouldStartLoadWithRequest приведен ниже -

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSString* strExtension;
NSLog(@"THE Path of the image %@",request);
NSString *imageName = [[[request URL] path] lastPathComponent];
NSArray *comt = [imageName componentsSeparatedByString:@"."];
strExtension = [comt objectAtIndex:[comt count]-1];
NSLog(@"file extension %@",strExtension);
if ([strExtension isEqualToString:@"png"] || [strExtension isEqualToString:@"jpeg"] || [strExtension isEqualToString:@"jpg"]) {
    NSLog(@"######v %@",[[request URL] path]);
    QLPreviewController *previewController = [[QLPreviewController alloc] init];
    ImageViewController *imagecontrller = [[ImageViewController alloc] init];
    previewController.dataSource = imagecontrller;
    previewController.delegate = imagecontrller;
    [imagecontrller setImageURL:[request URL]];
    previewController.currentPreviewItemIndex = 0;
    [parentvc.navigationController presentModalViewController:previewController animated:YES];
    [previewController release];
    UIAlertView* alertView=[[UIAlertView alloc] initWithTitle:@"Alert" message:imageName delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
    [alertView show];
    [alertView release];
    //[imagecontrller release];


    return NO;
}else {
    return YES;
}

}

1 Ответ

1 голос
/ 06 сентября 2011

Обычно, если [UIViewController presentModalViewController:animated:] не работает, это потому, что в существующем контроллере представления не установлено свойство parentViewController.По сути, он не правильно подключен к иерархии представлений.Для этого есть множество причин, но ... это то, на что вам следует обратить внимание.

Вам нужно либо (a) найти другой контроллер представления, который имеет parentViewController и который выполняет presentModalили (b) тщательно переработать ваш код, чтобы каждый из контроллеров представления знал о своем родителе, или ...

(c) Простое решение здесь - сохранить ссылку на ваш топ-Контроллер уровня представления, и сделайте настоящий мод оттуда.Когда вы будете готовы отклонить модальный контроллер представления, он может фактически вызвать dismissModalViewControllerAnimated: сам по себе, и это будет перенаправлено на контроллер представления, который его представил.Удобно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...