使用两个视图控制器,第二个不会显示视图

Posted

技术标签:

【中文标题】使用两个视图控制器,第二个不会显示视图【英文标题】:Using two view controllers, second one won't display views 【发布时间】:2014-11-11 22:22:42 【问题描述】:

由于某种原因,我无法在我的应用程序中显示来自辅助视图控制器的视图。 我的主视图控制器调用另一个负责加载 pdf 视图的视图控制器。

MainViewController 中的代码如下所示:

- (int)openPDF

    [self loadSettingsWithDefaults];
    RDPDFViewController *m_pdf;
    if( m_pdf == nil )
    
        m_pdf = [[RDPDFViewController alloc] initWithNibName:@"RDPDFViewController"bundle:nil];
    
    int result = [m_pdf PDFOpen:@"/Users/steve/test.pdf" withPassword:@""];
    if(result == 1)
    
        m_pdf.hidesBottomBarWhenPushed = YES;
        [self.navigationController pushViewController:m_pdf animated:YES];
    
    return result;

此代码位于第二个视图中。这是上面MainViewController中提到的方法。

- (int)PDFOpen:(NSString *)path withPassword:(NSString *)pwd 
    [self PDFClose];
    PDF_ERR err = 0;
    m_doc = [[PDFDoc alloc] init]; err = [m_doc open:path :pwd]; switch( err )
    
        case err_ok: break;
        case err_password: return 2;
            break; default: return 0;
    
    CGRect rect = [[UIScreen mainScreen]bounds];
    //GEAR
    if (![self isPortrait] && rect.size.width < rect.size.height)  float height = rect.size.height;
        rect.size.height = rect.size.width;
        rect.size.width = height;
    
    //END
    if(SYS_VERSION>=7.0) 
        m_view = [[PDFView alloc] initWithFrame:CGRectMake(0, 0, rect.size.width, rect.size.height)]; 
    else
    
        m_view = [[PDFView alloc] initWithFrame:CGRectMake(0, 0, rect.size.width, rect.size.height-20-44)];
    
    [m_view vOpen :m_doc :(id<PDFViewDelegate>)self];
    pagecount = [m_doc pageCount];
    [self.view addSubview:m_view];
    return 1; 

当代码执行时,我知道正在创建视图对象,因为我可以在控制台中看到来自它的调试输出。但是它不会在 iPhone 模拟器中显示新视图。

请随时提供反馈——请记住这是我的第一篇 *** 帖子!我很乐意根据需要提供更多信息。

【问题讨论】:

您是否在 UINavigationController 中创建了您的第一个视图控制器? 第一个视图控制器是在应用程序启动时创建的,并且工作正常。我所有的其他屏幕都可以工作。但要回答您的问题,“navigationcontroller”(不区分大小写)的快速搜索不会出现在任何引用第一个视图控制器的地方。 当处理通过堆栈推送的多个视图(而不是模态显示)时,您需要将它们嵌入到 UINavigationController 中。显然你正在调用它 ([self.navigationController pushViewController:m_pdf animated:YES];) 但如果你还没有真正将你的 VC 连接到导航控制器,什么都不会发生。 啊好的。这就说得通了。感谢您的意见!我会尝试一下,看看会发生什么。我是 objC 的新手,在进行这个项目时正在学习……看来我可能需要找一本好书…… 所以在我这样做之后,我是否需要做任何其他事情来确保将控制权交还给第一个视图控制器,或者这完全取决于第二个视图控制器的编写方式? 【参考方案1】:

我的主视图控制器被设置为我的应用程序的根视图控制器。我必须将导航控制器设置为根视图控制器,然后再添加其他视图控制器。

之后我告诉 navController 弹出到根视图控制器。

navController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
[navController setNavigationBarHidden:YES];
[navController popToRootViewControllerAnimated:YES];

【讨论】:

以上是关于使用两个视图控制器,第二个不会显示视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将第二个表格视图的值与第一个表格视图的单击行的关系分开?

在不使用导航控制器的情况下转到第二个视图时如何显示动画?

如何在快速关闭第二个视图控制器后启用带有视图的自定义视图控制器

如何在第二个视图控制器上显示核心数据?

将选定对象传递给第二个视图控制器并在 uilabel 中显示

无法快速显示第一个视图控制器将值传递给第二个视图控制器