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