【问题标题】:presentModalViewController fails to show uppresentModalViewController 无法显示
【发布时间】:2011-09-05 21:38:58
【问题描述】:

首先,我是 Objective C 世界的新手,所以我的问题可能听起来很幼稚。甚至方法的结构也可能不太合适,所以请多多包涵。我相信我会随着我的前进而学习。

我有一个容器视图控制器“DeckViewController”,其中包含另一个视图控制器“CardDetails”。 CardDetails 有一个滚动视图,用于一次加载 3 个自定义 UIView (CustomWebView),其中加载了 HTML。在这些视图中加载的 HTML 包含图像,并且要求一旦用户单击页面中的任何图像,它就会在 QLPreviewController 中打开。我已将 HTML 中的所有图像包装在一个锚标记中,以确保 shouldStartLoadWithRequest 委托处理该图像的加载。

此处理程序是在 CustomWebView 类中编写的,我正在尝试使用 CustomWebView 的父视图控制器加载预览控制器,即 CardDetails

我已经跟踪了代码,它产生了正确的值,但是模态视图控制器根本没有出现。我可能只是错过了一个小链接或错过了这里的全部内容。非常感谢帮助和指导。

shouldStartLoadWithRequest 委托处理程序的代码 sn-p 如下 -

- (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;
}

}

【问题讨论】:

  • 您可能希望对问题中的文本进行一些结构化,使其更易于阅读。以某些部分为例。
  • 感谢您指出。我以后一定会这样做的。

标签: cocoa-touch uiviewcontroller uikit


【解决方案1】:

通常,如果[UIViewController presentModalViewController:animated:] 不起作用,那是因为现有的视图控制器没有设置它的parentViewController 属性。基本上,它没有正确地连接到视图层次结构中。这有各种各样的原因,但是……这就是你应该研究的。

您需要 (a) 找到另一个具有 parentViewController 的视图控制器并让它执行 presentModal,或者 (b) 仔细重新编写代码,以便每个视图控制器都知道它们的父级, 或 ...

(c) 这里的简单解决方案是保留对顶级视图控制器的引用,然后从那里执行 presentModal。当您准备好关闭模态视图控制器时,它实际上可以在其自身上调用dismissModalViewControllerAnimated:,并将其转发给呈现它的视图控制器。方便。

【讨论】:

  • 感谢您的帮助。我按照您的建议构建了代码,并更改了调用 [_parentView presentModalViewController:previewController animated:YES];而不是 [_parentView.navigationController presentModalViewController:previewController animated:YES];它奏效了。
  • 欢迎来到 StackOverflow。我很高兴我能提供帮助。请点击我的答案旁边的灰色复选标记,现在您已经可以使用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
相关资源
最近更新 更多