我试图以模糊方式呈现视图控制器,具有透明背景.我的目标是让呈现和呈现的视图控制器视图同时显示.问题是,当呈现动画结束时,呈现视图控制器的视图消失.
- (IBAction)pushModalViewControllerButtonPressed:(id)sender
{
ModalViewController *modalVC = [[ModalViewController alloc] init];
[self presentViewController:modalVC animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以将视图添加为子视图,但出于某种原因我想避免使用此解决方案.我该怎么办呢?
objective-c modalviewcontroller presentmodalviewcontroller ios
我想添加一个tableViewController作为containerViewController的子视图控制器(如下所示).根据Apple的View Controller Programming Guide,我可以通过我的containerViewController中的以下代码行实现这一点:
[self addChildViewController:tableViewController];
[self.view addSubview:tableViewController.view];
[tableViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
事实上,这很好.现在的问题是我不想将tableViewController的视图添加为containerViewController的根视图的子视图.相反,我想将它添加为containerView的子视图(参见图像),它本身是containerViewController的根视图的子视图.所以我改变了上面的代码如下:
[self addChildViewController:tableViewController];
[self.contentView addSubview:tableViewController.view];
[tableViewController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
现在,当我启动应用程序时,它立即崩溃并出现此错误:
由于未捕获的异常'UIViewControllerHierarchyInconsistency'而终止应用程序,原因:'子视图控制器:应该有父视图控制器:但实际的父级是:'
这里有什么问题?是不是可以将childViewController的视图添加到其containerViewController 的特定子视图中?或者如何在视图控制器层次结构中没有错误的情况下实现此目的?

parentviewcontroller addsubview ios childviewcontroller container-view
我想以模态方式添加一个透明背景的视图控制器,因此可以看到下面的父视图控制器.(这适用于iPhone,不适用于iPad.)
我试过这个:
TextFieldViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TextFieldVC"];
vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentViewController:vc animated:YES completion:^{}];
Run Code Online (Sandbox Code Playgroud)
没有运气,给视图控制器一个清晰的颜色背景.如果改变了什么,我的视图控制器就在故事板中.
我有以下代码在iOS7中完美运行.
[UIView animateWithDuration:0.5 animations:^(void) {
self.view.alpha = 0.5;
[self.navigationController.navigationBar setAlpha:0.3];
}]; //to make the background view controller semi-transparent
UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
[rootViewController setModalPresentationStyle:UIModalPresentationCurrentContext];
OverlayViewController *ctlr = [storyBoard instantiateViewControllerWithIdentifier:@"OverlayViewController"];
//present the OverlayViewController
[self presentViewController:ctlr animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
然后我在后台视图控制器的viewWillAppear中有以下内容,将其视图恢复为完全不透明.
[UIView animateWithDuration:1.0 animations:^(void) {
self.view.alpha = 1.0;
[self.navigationController.view setAlpha:1.0];
}];
Run Code Online (Sandbox Code Playgroud)
现在,使用iOS8,上面的代码不会将背景设置为半透明.OverlayViewController环绕黑色.
我在网上发现使用UIModalPresentationOverCurrentContext会给出预期的行为.它实际上确实如此,但背景视图控制器永远不会脱离视图层次结构(编辑以添加对此行为的引用:https://developer.apple.com/documentation/uikit/uimodalpresentationstyle).因此,从不调用viewWillAppear,因此永远不会删除半透明度.
显然,我可以使用像使用NSNotificationCenter的黑客,并在删除OverlayViewController时触发通知,但感觉就像一个简单的迂回方式.有没有其他方式我可以优雅地实现这一目标?
推论问题:
1)如果UIModalPresentationOverCurrentContext是实现这一目标的唯一方法,那么我想知道是否会被迫放置两个版本的代码以使其在iOS7和iOS8中都能正常工作.
2)显然,在早期版本的Xcode中无法识别新的枚举.那么,我的团队是否应该升级到Xcode 6以确保他们可以运行此代码,即使他们的其余工作仅以iOS7为中心?或者有没有办法告诉旧版本的Xcode忽略仅适用于iOS8的特定代码块?
我试图模态呈现如下的视图控制器:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"addPopover"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:vc animated:YES];
Run Code Online (Sandbox Code Playgroud)
现在使用UIModalPresentationCurrentContext手段我可以使用透明背景显示此视图,并查看新视图背后的另一个视图.然而,它阻止我能够通过转换呈现它.
有什么想法吗?或者我如何解决这个问题?谢谢.
iphone objective-c ipad uimodaltransitionstyle uimodalpresentationstyle
我想要一个透明背景颜色的模态视图,以便用户可以看到它背后的视图.
我想以UIViewController编程方式呈现一个应该以透明背景显示(或不显示)的内容.我希望它适用于iOS 7.0及更高版本.我发现自己有很多问题(和答案),但他们无法帮助我.这是我的应用程序的视图层次结构.
我正在使用侧面菜单控制器(RESideMenu).
我有一个rootView(来自RESideMenu的基础) - >显示一个中心控制器(以及一个左视图控制器)UINavigationController.
在要求中,我想呈现一个视图控制器
从推动的视图控制器(在导航层次结构中)
从呈现的视图控制器(在导航层次结构中)
另外,我需要呈现它并执行一些操作,然后将其删除.
我很确定这应该适用于许多情况,有(或没有)侧面菜单,甚至导航控制器.
我在这个队列中发布了一个单独的问题(当然也是它的答案),因为我认为这对社区开发者有帮助,他们可能也因为缺乏可接受的解决方案而感到沮丧.
uiviewcontroller uinavigationcontroller ios presentviewcontroller
我正在设置self.window.rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;我的应用程序代理,以便我可以呈现视图控制器并使视图透明(请参阅此SO 问题).
这很好用,唯一的一点是我在呈现视图控制器时无法动画.有没有人得到这个工作?如果没有,我还有其他选择吗?
我提出的视图控制器是一个"演练"是由一个UIScrollView和UIPageControl是应该"悬停"在界面上,所以你可以在边缘略微看到它的背景.
我一直在关注这个问题的解决方案,以显示透明背景的视图.我遇到的问题是,一旦显示模态视图控制器,底层视图就不再旋转了.
例如,如果A是我的视图控制器,则B是我的模态视图.问题如下.我目前的设备是纵向A显示的.然后我以B模态呈现.然后我旋转我的设备,B随之旋转,但A保持原样.
请有人建议如何处理这种旋转,以便底层视图(A)也被旋转?
ios ×6
objective-c ×5
ipad ×2
iphone ×2
transparency ×2
addsubview ×1
animation ×1
background ×1
cocoa-touch ×1
ios7 ×1
ios8 ×1
modal-dialog ×1