我已经构建了一个应用程序,用于填充包含大量项目的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。还在先前的视图控制器中尝试了一个类。
有没有办法直接跳回桌面视图?如果是这样,怎么样?
答案 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];
}