xcode从嵌套视图打开tableview

时间:2014-09-25 15:19:35

标签: xcode uitableview uinavigationcontroller nested

我已经构建了一个应用程序,用于填充包含大量项目的tableview。您可以单击某个项目,它将打开该项目的详细视图。然后,您可以单击一个按钮,打开另一个显示详细项目详细信息的视图。在进入完成视图之前,我还会显示一些嵌套视图。我想要一个按钮点击直接回到桌面视图,但还没找到方法。我尝试了以下想法:

1st(只会关闭到上一个屏幕): [self dismissViewControllerAnimated:YES completion:nil];

第二名(根本不起作用): [self.navigationController popToRootViewControllerAnimated:NO];

3(不做任何事): WorkOrderTableViewController * pushTable = [[WorkOrderTableViewController alloc] init]; [UINavigationController pushViewController:pushTable animated:YES];

第4名(什么都不做): WorkOrderTableViewController * pushTable = [[WorkOrderTableViewController alloc] init]; [self.navigationController pushViewController:pushTable animated:YES];

我甚至尝试过调用之前屏幕/视图中的segues。还在先前的视图控制器中尝试了一个类。

有没有办法直接跳回桌面视图?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

关于上述评论中的代码......

当您使用alloc时,您正在创建对象。你想要的是回到已经存在的视图控制器。将WorkOrderTableViewController的原始实例保存在某个地方(app delegate?自定义父控制器?),以便您可以返回它。

例如,您可以:

创建UINavigationController的子类,通过弹出到正确的视图控制器来响应通知。 (你需要自己定义“正确”的含义。)

- (void)viewDidLoad {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popToTable) name:kReturnToTable object:nil];
}

- (void)popToTable {
    UIViewController *target = nil;
    for (UIViewController *controller in [self viewControllers]) {
        if ([controller isKindOfClass:[UITableViewController class]]) {
            target = controller;
            break;
        }
    }
    if (target) {
        [self popToViewController:target animated:YES];
    } else {
        NSLog(@"Error -- couldn't find my controller in %@", [self viewControllers]);
    }
}

让最后一个控制器的按钮发布该通知。 (通知名称在最后一个控制器的头文件中定义。)

- (IBAction)backToTable:(id)sender {
    [[NSNotificationCenter defaultCenter] postNotificationName:kReturnToTable object:nil];
}