【问题标题】:disable elements on UIView behind modal UIView在模态 UIView 后面的 UIView 上禁用元素
【发布时间】:2011-01-07 13:21:26
【问题描述】:
我有一个小于超级视图的 UIView,因此当单击按钮时,我可以将此视图表示为模态视图。
我设法做到了以下几点:
* 向父视图添加子视图。
* 居中这个模态视图
我现在正试图使 UIView 后面的元素不可点击。并且还在我的模态视图的前面添加一个灰色阴影,以便用户了解模态视图是焦点视图。
我想知道如何实现。
我不想使用演示模式转换。我知道并且已经在其他项目中实现了这一点。
任何帮助表示赞赏。
【问题讨论】:
标签:
iphone
objective-c
background
modal-view
【解决方案1】:
最简单的方法是在“模态”视图后面放置一个带有半透明灰色背景的全屏UIView。然后它会拦截所有的触摸。它可能看起来像这样:
UIView *dimBackgroundView = [[UIView alloc] initWithFrame:theSuperview.bounds];
dimBackgroundView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:.5f];
[theSuperview addSubview:dimBackgroundView];
[theSuperview addSubview:modalView];
为了将来参考,您可以设置myView.userInteractionEnabled = NO 以禁用视图上的触摸事件。
【解决方案2】:
有几种方法可以做到这一点。
如果你有一个自定义位置的自定义视图,你可以像这样修改它:
创建实例var:
UIView* backgroundView;
并且无论何时需要它,都可以将它放在您的自定义视图后面:
if (backgroundView == nil)
backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width)];
backgroundView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:.5f];
[self.view addSubview:backgroundView];
[backgroundView animateBump:customView.view];
[backgroundView addSubview:customView.view];
当你不再需要它时
[backgroundView removeFromSuperview];