如何关闭容器视图

Posted

技术标签:

【中文标题】如何关闭容器视图【英文标题】:How to close a container view 【发布时间】:2014-11-10 06:27:14 【问题描述】:

我正在使用 xcode 5 开发一个 ios 项目。我需要在弹出窗口中显示一个选项表,因此我使用了容器视图并通过 segue 将其称为弹出窗口。现在的问题是,只要我在其中选择一行,我就想关闭(而不仅仅是消失)容器视图。 请指导我如何实现它。在此先感谢。

【问题讨论】:

你能发布一些代码吗?要“关闭”容器视图,您不只是将其从超级视图中删除吗?喜欢[containerView removeFromSuperview] @rfj001 希望我发布哪组代码?让我详细解释一下:[如果我错了请纠正我]我正在使用委托方法将值从容器视图获取到主视图。我调试并发现委托的实现在主视图即将结束时被调用,这给了我一种直觉,如果我能够结束容器视图,那么只需轻轻一按,它将在预期的时间被调用。而且我也可以关闭弹出窗口(这是我的要求之一。 我没有使用 xib 文件,所以如果你能告诉我在不使用 xib 或 nib 的情况下将容器视图添加到 superview 的语法是什么 【参考方案1】:

推荐使用弹出窗口而不是 UIAlertView。但是如果需要使用弹出视图,您可以简单地显示/隐藏容器视图控制器的视图!

【讨论】:

嗨@thatzprem 我不只是想隐藏或显示容器视图,我想结束它并将控件返回到超级视图。 容器视图不过是一个视图控制器。您如何以模态方式呈现它并关闭模型视图控制器。 能否请您详细说明,您是要我关闭容器视图 MainViewController *mainViewController=[[MainViewController alloc]init]; [self.navigationController presentModalViewController:mainViewController Animation:YES]; [selfdismissModalViewControllerAnimated:YES];【参考方案2】:

我终于找到了解决方案,它不是可行的解决方案,但使我免于对项目进行重大更改。我所做的是-

我使用 unwind segue 将值从子弹出容器传递回主控制器。为此我介绍了两种方法第一个是:容器视图控制器中的 prepareForSegue 方法-

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

if([[segue identifier] isEqualToString:@"CommentOptionToComments"])


    APMCommentsViewController *objCommentController=(APMCommentsViewController *)segue.destinationViewController;
    for(APMOption *obj in self.optionList)
    
        if(obj.IsAnswer)
        
            NSString *dataToPassBack=[NSString stringWithFormat:@"%d",obj.Number];
            self.passBackToParent=dataToPassBack;
        
    
    NSLog(@"Return to parent");


另一个是 ParentViewController 中的 unwindSegue 方法 -

-(IBAction)unwindToList:(UIStoryboardSegue *)segue

    //get the value from the segue and use it as per your requirement
    APMCommentsOptionViewController *source=[segue sourceViewController];
    self.lblHiddenResponse.text=source.passBackToParent;

但不要忘记在 ParentViewController.h 文件中声明展开转场。

现在我所做的是将我的原型单元连接到情节提要中的 unwind segue,并为 unwindsegue 指定一个标识符名称(出现在 Utility Area 中)

但问题是在调用 didSelectRowAtIndexPath 之前调用了展开 segue,结果虽然弹出窗口能够自行关闭但无法将所需的值发送到 ParentViewController。 为此,我只是在方法 didSelectRowAtIndexPath 中再次调用了 prepareForSegue,语法如 -

[self performSegueWithIdentifier:@"CommentOptionToComments" sender:self];

正如我所说,这不是一个可行的解决方案,但这最终解决了我的问题,但如果我使用 UIPopOverController 会更简单。

【讨论】:

以上是关于如何关闭容器视图的主要内容,如果未能解决你的问题,请参考以下文章

容器视图控制器示例[关闭]

在“关闭”状态下使用滚动视图启动时遇到问题

关闭并显示按钮上的视图单击从另一个视图

如何关闭关闭 TestContainers 中的容器?

使用带有页面视图控制器的容器

SwiftUI - 如何关闭工作表视图,同时关闭该视图