我希望你能帮助我。我设计了一个Tab Bar应用程序的应用程序。在第一个选项卡的视图控制器中,有一个按钮,按下该按钮可生成模态视图。我已经在该模态视图上初始化了一个导航控制器,因为当我点击我的模态视图(我用来输入用户数据)上的“保存”按钮时,我按下另一个表视图(显示所有用户输入数据的表)至今)。在堆叠的表格视图中,我有一个“完成”按钮,按下该按钮时,应该转到选项卡上的另一个视图(用户输入的进度视图),即关闭堆栈。
所以我的问题是,如果我是两个控制器进入堆栈,如何将堆栈弹出到另一个不在堆栈上的视图?我已经使用了popToViewController
方法,但正如您可能已经猜到的那样,我得到了“尝试弹出到不存在的视图控制器”消息。这是我在堆栈第二个视图中的简单代码:
- (IBAction)doneButtonPressed:(id)sender
{
LogTableViewController *logTableViewController = [[LogTableViewController alloc]init];
[self.navigationController popToViewController:logTableViewController animated:YES];
[logTableViewController release];
}
其中LogTableViewController
不在堆栈中,而是应用程序中另一个选项卡的另一个目标。有任何想法吗?提前致谢。
答案 0 :(得分:1)
我不完全确定为什么你不能将新的视图控制器推送到堆栈,但是如果你需要弹出它,你可以这样做:
//create new VC
LogTableViewController *newVC = [[LogTableViewController alloc]init];;
//get VC stack
NSMutableArray * newControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
//choose where to insert the new vc
NSUInteger insert_index = [newControllers count] - 1;
//insert into the stack
[newControllers insertObject:newVC atIndex:insert_index];
//replace stacks
[self.navigationController setViewControllers: newControllers];
//pop to your new controller
[self.navigationController popViewControllerAnimated:YES];
希望这会有所帮助。
答案 1 :(得分:0)
你很亲密。只是做:
- (IBAction)doneButtonPressed:(id)sender
{
LogTableViewController *logTableViewController = [[LogTableViewController alloc]init];
[self.navigationController setViewControllers:[NSArray arrayWithObject:logTableViewController] animated:YES];
[logTableViewController release];
}