选择行以更改视图

时间:2010-06-08 19:48:20

标签: iphone objective-c

我创建了视图控制器并附加了它们以控制它们各自的视图。我无法弄清楚如何使以下代码去正确的视图(这是在根视图控制器中):

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     RunViewController *runViewController = [[RunViewController alloc] initWithNibName:@"RunView" bundle:[NSBundle mainBundle]];
     CalcViewController *calcViewController = [[CalcViewController alloc] initWithNibName:@"CalcView" bundle:[NSBundle mainBundle]];
     PushViewController *pushViewController = [[PushViewController alloc] initWithNibName:@"PushView" bundle:[NSBundle mainBundle]];
     SitViewController *sitViewController = [[SitViewController alloc] initWithNibName:@"SitView" bundle:[NSBundle mainBundle]];
     TimerViewController *timerViewController = [[TimerViewController alloc] initWithNibName:@"TimerView" bundle:[NSBundle mainBundle]];

     [self.navigationController pushViewController:runViewController animated:YES];
     [runViewController release];
     [self.navigationController pushViewController:pushViewController animated:YES];
     [pushViewController release];
     [self.navigationController pushViewController:sitViewController animated:YES];
     [sitViewController release];
     [self.navigationController pushViewController:timerViewController animated:YES];
     [timerViewController release];
     [self.navigationController pushViewController:calcViewController animated:YES];
     [calcViewController release];

     runViewController = nil;
     pushViewController = nil;
     sitViewController = nil;
     timerViewController = nil;
     calcViewController = nil;
}

每次我选择表格中的任何一行时 - 所有视图都会出现。如何安排它们只打开它应该的视图?

1 个答案:

答案 0 :(得分:1)

问题是您在每个视图控制器上调用pushViewController:animated。如果您只想要其中一个视图控制器,只需在您想要的那个上调用pushViewController:animated即可。这是一个示例:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath {

    // This code shows a different view depending on the selected row.
    UIViewController *viewController = nil;
    switch (indexPath.row) {
        case 0:
            viewController = [[RunViewController alloc] initWithNibName:@"RunView" bundle:[NSBundle mainBundle]];
            break;

        case 1:
            viewController = [[CalcViewController alloc] initWithNibName:@"CalcView" bundle:[NSBundle mainBundle]];
            break;

        case 2:
            viewController = [[PushViewController alloc] initWithNibName:@"PushView" bundle:[NSBundle mainBundle]];
            break;

        case 3:
            viewController = [[SitViewController alloc] initWithNibName:@"SitView" bundle:[NSBundle mainBundle]];
            break;

        case 4:
            viewController = [[TimerViewController alloc] initWithNibName:@"TimerView" bundle:[NSBundle mainBundle]];
            break;
    }

    if (viewController != nil) {
        [self.navigationController pushViewController:viewController animated:YES];
        [viewController release];
    }

}