从堆栈中的View Controller切换到不在堆栈上的View Controller

时间:2011-12-08 05:06:10

标签: iphone ios4 uinavigationcontroller xcode4.2

我希望你能帮助我。我设计了一个Tab Bar应用程序的应用程序。在第一个选项卡的视图控制器中,有一个按钮,按下该按钮可生成模态视图。我已经在该模态视图上初始化了一个导航控制器,因为当我点击我的模态视图(我用来输入用户数据)上的“保存”按钮时,我按下另一个表视图(显示所有用户输入数据的表)至今)。在堆叠的表格视图中,我有一个“完成”按钮,按下该按钮时,应该转到选项卡上的另一个视图(用户输入的进度视图),即关闭堆栈。

所以我的问题是,如果我是两个控制器进入堆栈,如何将堆栈弹出到另一个不在堆栈上的视图?我已经使用了popToViewController方法,但正如您可能已经猜到的那样,我得到了“尝试弹出到不存在的视图控制器”消息。这是我在堆栈第二个视图中的简单代码:

- (IBAction)doneButtonPressed:(id)sender 
{
    LogTableViewController *logTableViewController = [[LogTableViewController alloc]init]; 

    [self.navigationController popToViewController:logTableViewController animated:YES];

    [logTableViewController release];
}

其中LogTableViewController不在堆栈中,而是应用程序中另一个选项卡的另一个目标。有任何想法吗?提前致谢。

2 个答案:

答案 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];
}