使用UINavigationController生成相同视图的新实例

时间:2011-06-27 20:51:24

标签: iphone objective-c uinavigationcontroller

我正在尝试使用以下代码生成相同视图的新实例:

- (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];
}

问题是它不起作用......

我没有任何错误或任何错误 - 它只是没有做任何事情。

有什么想法吗?

2 个答案:

答案 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];
}