我正在尝试使用以下代码生成相同视图的新实例:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
InventoryController *inventoryController = [[InventoryController alloc] initWithNibName:@"InventoryView" bundle:nil];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:self];
[navigationController pushViewController:inventoryController animated:YES];
[inventoryController release];
[navigationController release];
}
问题是它不起作用......
我没有任何错误或任何错误 - 它只是没有做任何事情。
有什么想法吗?
答案 0 :(得分:2)
@PengOne说的没错......你正在创建一个导航控制器,然后释放它,并没有什么可以阻止它被释放。此外,您还没有将导航控制器的视图添加到窗口,并且您没有将导航控制器设置为窗口的根视图控制器,因此无法看到此特定导航堆栈中的控制器控制的视图
试试这个:在Xcode中创建一个基于导航的项目。您不需要添加任何代码 - 只需创建项目,以便查看提供的代码。你会看到app delegate有一个用于存储nav控制器的retain属性,nav控制器被设置为窗口的根视图控制器。
答案 1 :(得分:1)
如果您当前的控制器已经是UINavigationController层次结构的一部分,那么您不能创建新的导航控制器 - 使用现有的控制器(请注意,如果它存在,每个UIViewController都有对其父UINavigationViewController的引用):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
InventoryController *inventoryController = [[InventoryController alloc] initWithNibName:@"InventoryView" bundle:nil];
[self.navigationController pushViewController:inventoryController animated:YES];
[inventoryController release];
}