2011-09-05 48 views
0

首先,我是Objective C世界的新手,所以我的問題可能聽起來很樸素。即使是方法的結構可能也不太合適,所以對我很好。我相信隨着我的前進,我會學習。presentModalViewController無法顯示

我有一個容器視圖控制器「DeckViewController」,其容納另一個視圖控制器「CardDetails」。 CardDetails有一個滾動視圖,用於加載3個自定義UIView(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; 
} 

}

+0

您可能希望將問題中的文本結構化一些,以便於閱讀。例如進入某些部分。 – lbergnehr

+0

感謝您指出。我將來肯定會這樣做。 – Chandan

回答

1

通常,如果[UIViewController presentModalViewController:animated:]不起作用,這是因爲現有的視圖控制器沒有它的parentViewController財產組。基本上,它沒有正確地掛在視圖層次結構中。這有各種各樣的原因,但是......這就是你應該看看的。您需要(a)找到另一個視圖控制器,該視圖控制器確實具有parentViewController並擁有presentModal,或者(b)仔細地重新處理您的代碼,以便每個視圖控制器都知道它們的父級,或...

(c)這裏簡單的解決方案是保持對頂級視圖控制器的引用,並從那裏執行presentModal。當你準備關閉模式視圖控制器時,它實際上可以自己調用dismissModalViewControllerAnimated:,並且它將被轉發給呈現它的視圖控制器。方便。

+0

感謝您的幫助。我按照你的建議構建了代碼並做了一些調用[_parentView presentModalViewController:previewController animated:YES];而不是[_parentView.navigationController presentModalViewController:previewController animated:YES];它的工作。 – Chandan

+0

歡迎來到StackOverflow。我很高興能夠提供幫助。請點擊我答案旁邊的灰色複選標記,現在您已經可以正常工作了。 –