解除/委托故事板中模态堆栈中的第二个视图

问题描述:

我有一个TableView,它描述了一个代表章节的代表章节的代表书本的书。解除/委托故事板中模态堆栈中的第二个视图

这个TableView的顶部我有一个导航栏中的按钮,允许“导航”。

此导航按钮的目标是允许用户容易地跳跃到给定章/节,而无需手动滚动(其可以是非常长)。

当按钮被按下的tableview控制器被称为显示书中的所有可用的章节和当选择一个章节另一个表的观点被称为当前章节显示可用的诗句的列表。最后,当选择该行时,显示书籍的tablew视图应该滚动到给定的索引/行。

这样的想法:从代表书中的tableview我叫章查看,模式和诗句作为一推了章节查看。

enter image description here

我的问题是,我没有得到管理的代表和来自第二模态视图解雇点。

有了1个模态视图,我做了这样的事情。

在显示的VC(视图控制器)予添加的协议和委托

@protocol ChapitresTableViewControllerDelegate <NSObject> 
- (void)didDismissPresentedViewController; 
@end 

@interface ChapitresTableViewController : UITableViewController 
@property (nonatomic, weak) id <ChapitresTableViewControllerDelegate> delegate; 
@end 

我在didSelectRow

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.delegate didDismissPresentedViewController]; 
} 

在显示VC我添加以下行

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    ChapitresTableViewController *chapitresTableViewController = segue.destinationViewController; 
    chapitresTableViewController.delegate = self; 
} 

当然

-(void)didDismissPresentedViewController 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

这将只是正常工作,如果我想的第一模VC后关闭,但我要的是有后,我在第二次点击第二个被解雇。好的,我可以在第二个模态VC中编写协议和内容,但是我如何设法让代理发送给第二个VC。

希望我的问题很清楚,要解释它并不那么容易。

有人了解我,可以帮助我吗?

注意:我现在知道我不会将任何参数传递给代理,我将在稍后执行滚动操作。现在我只是希望能够关闭第二视图,然后我会添加所需的东西传递参数回委托

我相信你能做到这一点,但不是用一个模式视图控制器导航栏,使用导航控制器不是更容易吗?然后,您可以使用popToViewController根据需要返回到特定的视图控制器。您可以通过您想要弹出的各种控制器的UIViewController*,或者通过编程方式完成: How to pop back to specify viewController from navigationController(viewControllers/stack)?

在这种情况下,保留了以前的视图控制器。你弹出的那些被释放(就像你放弃的模态那样),但是你保留的那些被保留下来(就像你在模态世界中保留的那些一样)。

但是,如果书很大,你必须对内存使用情况很敏感。因此,您可能需要处理didReceiveMemoryWarning以在模式序列或推送序列中释放先前视图的模型数据,在这种情况下,您需要在viewDidAppear上查看您的应用是否必须释放内存以响应到didReceiveMemoryWarning并在这种情况下重新加载它。但是,这是所需的行为,无论哪种方式,如果需要的话,优雅地释放页面(并且在特定视图重新出现时重新加载它们),但是如果可以的话将其保存在内存中。

最后,您可能还想考虑使用UIPageViewController。鉴于你所描述的,我想先考虑UIPageViewControllerUINavigationController,并推动第二,并使用模态第三。

+1

它工作正常,我的视图控制器关闭并弹出到我想要的。但是现在我想将信息“发回”给视图控制器,在我的情况下,发回部分和行以便我可以滚动。我将如何做到这一点。我只看到了“全球变数”,但通常这样做并不好。只要我弹出的视图控制器被保留,我可以从堆栈中的另一个控制器修改该视图控制器的属性吗? – HpTerm

+0

你绝对可以。 – Rob

+0

你的回答并不回答如何解除模态堆栈中的第二个视图的问题。但只要你的答案对我很好,完全满足了我的需求,我认为它也适用于其他人。我刚刚完成广泛测试我的应用程序与您的解决方案,它工作正常。感谢您的快速支持。 – HpTerm