将导航控制器添加到选项卡栏应用程序(以编程方式)

时间:2012-03-30 18:36:10

标签: iphone objective-c uinavigationcontroller uitabbarcontroller

这对某些人来说可能看起来像个愚蠢的问题,但在iPhone应用程序中处理不同类型的控制器对我来说仍然有点模糊。这是设置:

我有一个带有四个标签的标签栏应用程序。每个选项卡都将控制权传递给其各自的ViewController,其中一些是使用.XIB文件初始化的,有些是纯编程的。其中一个程序化的是DirectionsViewController,基本上是UITableViewController。从表中选择单元格需要(模态地)呈现DetailedDirectionsViewController,这需要对呈现视图控制器进行某种反向引用。我认为最简单的方法是向DirectionsDetailedDirections VC添加导航控制器 - 除非我不知道如何在没有.XIB文件的情况下执行此操作。

另外,我控制DetailedDirections的方式是通过以下方式更改Directions

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailedDirectionsViewController *vc = [[DetailedDirectionsViewController alloc] initWithStyle:UITableViewStyleGrouped];
    [self.tabBarController presentModalViewController:vc animated:YES];
}

我似乎记得我的一位教授说presentModalViewController是一种古老的方法,有更好的选择......我现在就记不起来了。

2 个答案:

答案 0 :(得分:1)

对于您想要做的事情,最好让标签栏中的标签管理UINavigationController,并将该导航控制器的rootViewController设置为DirectionsViewController。

然后在您的方向查看控制器的didSelectRowAtIndexPath:方法,您可以执行以下操作:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailedDirectionsViewController *vc = [[DetailedDirectionsViewController alloc] initWithStyle:UITableViewStyleGrouped];
    [self.navigationController pushViewController:vc animated:YES];
}

它会像你想要的那样运作。 UINavigation控制器将负责在您的详细路线视图控制器上放置一个后退按钮。

答案 1 :(得分:0)

如果我理解得很好,在tableview中:didSelectRow ..:你只需创建一个导航控制器,用想要以模态方式显示的视图控制器初始化它,然后在创建它之前创建一个UIBarButtonItem并将其添加到导航栏导航控制器作为选择器使用内部的dismiss命令创建一个新方法。