0

我有一个 TableView,它描述了一本书,其中的部分代表了代表经文的章节和行。

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

此导航按钮的目的是让用户无需手动滚动(可能很长)即可轻松跳转到给定的章节/诗句。

按下按钮时,称为显示本书的所有可用章节的表观视图控制器,并且选择了一章时,将另一个表视图称为显示当前章节中可用经文的列表。Finally when the line is chosen the tablew view displaying the book should scroll to the given index/row.

所以这个想法:从代表这本书的表格视图中,我将章节视图称为模态,将经文称为章节视图的推动。

在此处输入图像描述

我的问题是我没有得到管理委托并从第二个模式视图中解散的意义。

使用 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。

希望我的问题足够清楚,解释起来并不容易。

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

注意:我知道现在我没有将任何参数传递回委托,稍后我将执行此操作来进行滚动。现在我只想能够关闭第二个视图,然后我将添加所需的东西以将参数传递回委托

4

1 回答 1

1

我相信你可以做到这一点,但是比起带有导航栏的模态视图控制器,使用导航控制器不是更容易吗?然后,您可以使用popToViewController返回到特定视图控制器的任意多个级别。您可以传递UIViewController*您可能想要弹出到的各种控制器,或者以编程方式执行此操作:例如,如何从 navigationController(viewControllers/stack) 弹出指定 viewController?

在这种情况下,以前的视图控制器被保留。您弹出的那些被释放(就像您关闭的模态的被释放),但是您从中推送的那些被保留(就像您在模态世界中呈现的那些被保留)。

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

最后,您可能还想考虑使用UIPageViewController. 鉴于您所描述的,我想UIPageViewController首先考虑,UINavigationController然后推动 segues,然后使用模态 segues。

于 2012-11-15T16:09:24.560 回答