UIViewController 呈现 UINavigationController - 没有导航栏?

Posted

技术标签:

【中文标题】UIViewController 呈现 UINavigationController - 没有导航栏?【英文标题】:UIViewController presents a UINavigationController - no Nav Bar? 【发布时间】:2011-04-01 04:47:57 【问题描述】:

我有一个 UIViewController,里面有一个表格。点击蓝色的显示图标会使视图控制器呈现一个 UINavigationController。这工作正常,并且确实显示了导航控制器,但没有导航栏,如下所示:

我将如何让那个神奇的导航栏再次出现?我真的需要它在导航控制器中显示地图,而现在,它不起作用。

编辑:这是我用来展示它的代码:

// scanned recently table view thing
- (void)tableView:(UITableView *)tableVieww didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    [tableVieww deselectRowAtIndexPath:indexPath animated:YES];

    if(indexPath.section == 0) 
    NSString *info = [[scannedBackups objectAtIndex:indexPath.row] objectForKey:@"data"];
    NSArray *items = [info componentsSeparatedByString:@"&"];
    scanCodeViewCohntroller.dict = [[NSMutableDictionary alloc] init];
    int o;
    for (o = 0; o < [items count]; o++) 
        NSArray *secondItems = [[items objectAtIndex:o] componentsSeparatedByString:@"="];
        [scanCodeViewCohntroller.dict setObject:[secondItems objectAtIndex:1] forKey:[secondItems objectAtIndex:0]];
        


        /*NSError *err;
        scanCodeViewCohntroller.dict = [NSPropertyListSerialization propertyListWithData:[foo dataUsingEncoding:NSUnicodeStringEncoding] options:NSPropertyListMutableContainersAndLeaves format:kCFPropertyListXMLFormat_v1_0 error:&err];
        if(err != nil) 
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Corrupted Data" message:[NSString stringWithFormat:@"Your Scanned Backup Data Store is corrupted. It will now be erased. %@", [err localizedDescription]] delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
            [alert show];
            [alert release];
            scannedBackups = [[NSMutableArray alloc] init];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *fullFileName = [NSString stringWithFormat:@"%@/scannedCodes.plist", documentsDirectory];
            [scannedBackups writeToFile:fullFileName atomically:NO];

        [tableView reloadData];
        */
        [scanCodeViewCohntroller.dict setObject:[[scannedBackups objectAtIndex:indexPath.row] objectForKey:@"date"] forKey:@"date"];
        [scanCodeViewCohntroller initalizeData];
    [self presentModalViewController:scanCodeViewCohntroller animated:YES];
    

【问题讨论】:

查看-tableView:accessoryButtonTappedForRowAtIndexPath: 方法中的代码可能会有所帮助。您是否在现有导航控制器中推送新视图控制器?为了完整起见,了解您如何自定义导航栏也可能会有所帮助... 对不起,我应该把它包括在内,但它就是这样。 您正在显示用于选择单元格的代码,但不是在您点击蓝色按钮时调用的委托方法...这是您想要的吗? 这基本上就是该方法所调用的,因为两者的处理方式相同。我想既然像我这样的程序员很懒,那么少 5 行代码可能是送给你们的礼物 =P 让我看看我是否理解,点击单元格主体(白色部分)和点击蓝色附件按钮都执行相同的代码?我看到“详细信息”屏幕以模态方式出现。我没有看到从现有导航控制器推送视图控制器的参考。如果您以这种方式呈现视图控制器,导航栏将不会顺其自然。您只需手动将 UINavigationBar 添加到视图中。 【参考方案1】:

您需要获取导航控制器并调用setNavigationBarHidden:animated:。所以,试试吧:

[detailController.navigationController setNavigationBarHidden:NO animated:NO];

编辑:

根据您的编辑,我建议替换最后一行:

[self presentModalViewController:scanCodeViewCohntroller animated:YES];

与:

[self.navigationController pushViewController:scanCodeViewCohntroller animated:YES];

【讨论】:

很奇怪,这不会解决它。导航栏不会出现。 这确实将视图控制器推到它上面,但该视图控制器实际上封装在 UINavigationController 中,我将 UIViewController 与其中的 MapView 推送到其中。我可能会修改我的代码来接受这个。

以上是关于UIViewController 呈现 UINavigationController - 没有导航栏?的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 UIViewController 呈现 UIViewController

从另一个 UIViewController 中呈现一个 UIViewController?

模态呈现的 UIViewController 背景颜色随机变化

呈现的 UIViewController 不能呈现 UIAlertController

如何在 SKScene 中呈现 UIViewController?

呈现没有动画的 ViewController 会瞬间显示呈现者 UIViewController