如何在 iOS 中显示小型模态视图控制器?

Posted

技术标签:

【中文标题】如何在 iOS 中显示小型模态视图控制器?【英文标题】:How to display small, modal view controller in iOS? 【发布时间】:2018-06-14 21:55:09 【问题描述】:

我想知道如何以模态方式显示一个占据视图整体高度一小部分的小型视图控制器。

我创建了一个TestViewController 类,其中包含一个我关心按下的UIButton。这个视图控制器是在前一个视图控制器中执行某个操作后显示的,并且只占总高度的一小部分。

到目前为止,我有这段代码,它实现了使视图控制器“更小”并占据特定大小的目标。

TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
CGRect frame = CGRectMake(0, self.view.frame.size.height-80.0, self.view.frame.size.width, 80.0);

testViewController.view.frame = frame;

[self addChildViewController:testViewController];
[self.view addSubview:testViewController.view];
[testViewController didMoveToParentViewController:self];

但是,我如何配置此视图控制器,以便在我点击视图控制器外部时,我要么收到通知并可以采取行动(即解雇我自己),要么完全阻止触摸?这可能吗?

我尝试让视图控制器填满整个屏幕,然后有一个透明视图用于“拦截”在用于显示我的内容的小子视图之外发生的触摸,但我无法获得 @ 987654325@要透明,使用透明背景会导致显示黑色背景。

我目前正在查看 modalPresentationStyle 属性,但到目前为止似乎没有帮助。

【问题讨论】:

我为此做了一个 Github repo BonsaiController。 【参考方案1】:

要使UIViewController 透明,您必须呈现ModalViewController 并将modalPresentationStyle 的属性设置为UIModalPresentationOverCurrentContext

 ModalViewController *mvc = [[ModalViewController alloc]initWithNibName:@"ModalViewController" bundle:[NSBundle mainBundle]];
    
 mvc.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    
 [self presentViewController:mvc animated:YES completion:nil];

ModalViewController 中,您需要设置backgroundcolor clear 并设置opaque false。

self.view.backgroundColor = [UIColor clearColor];
self.view.opaque = false;

如果您想让ModalViewController 透明,请根据您的要求设置backgroundcolor 和不透明度。

【讨论】:

这可以制作全屏 - 现在您如何将其与仅占据屏幕的一部分并监听我关心的区域之外的触摸相结合?

以上是关于如何在 iOS 中显示小型模态视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 iOS 7 自定义转换在顶部呈现半模态视图控制器

显示模态视图 - IOS

ios:如何关闭模态视图控制器,然后弹出推送的视图控制器

iOS——如何控制模态视图控制器的大小?

如何等到模态对话框在ios中返回结果

如何更改模态视图 iOS 6 上的状态栏