相关疑难解决方法(0)

iOS:具有透明背景的Modal ViewController

我试图以模糊方式呈现视图控制器,具有透明背景.我的目标是让呈现和呈现的视图控制器视图同时显示.问题是,当呈现动画结束时,呈现视图控制器的视图消失.

- (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

175
推荐指数
12
解决办法
14万
查看次数

将子视图控制器的视图添加到父视图控制器的子视图

我想添加一个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 的特定视图中?或者如何在视图控制器层次结构中没有错误的情况下实现此目的?

containerViewController

parentviewcontroller addsubview ios childviewcontroller container-view

29
推荐指数
1
解决办法
6万
查看次数

透明ViewController看到下面的父母?

我想以模态方式添加一个透明背景的视图控制器,因此可以看到下面的父视图控制器.(这适用于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)

没有运气,给视图控制器一个清晰的颜色背景.如果改变了什么,我的视图控制器就在故事板中.

iphone transparency objective-c uiviewcontroller

20
推荐指数
4
解决办法
2万
查看次数

提出在iOS7和iOS8中均可使用的半透明viewcontroller

我有以下代码在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的特定代码块?

ios ios7 ios8

15
推荐指数
1
解决办法
8644
查看次数

带有Transition的UIModalPresentationCurrentContext?

我试图模态呈现如下的视图控制器:

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

10
推荐指数
2
解决办法
1万
查看次数

如何在Objective-C中将模态背景颜色更改为透明

我想要一个透明背景颜色的模态视图,以便用户可以看到它背后的视图.

background modal-dialog objective-c

9
推荐指数
3
解决办法
1万
查看次数

呈现具有透明背景的模态视图控制器

我想以UIViewController编程方式呈现一个应该以透明背景显示(或不显示)的内容.我希望它适用于iOS 7.0及更高版本.我发现自己有很多问题(和答案),但他们无法帮助我.这是我的应用程序的视图层次结构.

我正在使用侧面菜单控制器(RESideMenu).

我有一个rootView(来自RESideMenu的基础) - >显示一个中心控制器(以及一个左视图控制器)UINavigationController.

在要求中,我想呈现一个视图控制器

从推动的视图控制器(在导航层次结构中)

从呈现的视图控制器(在导航层次结构中)

另外,我需要呈现它并执行一些操作,然后将其删除.

我很确定这应该适用于许多情况,有(或没有)侧面菜单,甚至导航控制器.

我在这个队列中发布了一个单独的问题(当然也是它的答案),因为我认为这对社区开发者有帮助,他们可能也因为缺乏可接受的解决方案而感到沮丧.

uiviewcontroller uinavigationcontroller ios presentviewcontroller

9
推荐指数
1
解决办法
1万
查看次数

呈现具有透明度和动画的视图控制器

我正在设置self.window.rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;我的应用程序代理,以便我可以呈现视图控制器并使视图透明(请参阅此SO 问题).

这很好用,唯一的一点是我在呈现视图控制器时无法动画.有没有人得到这个工作?如果没有,我还有其他选择吗?

我提出的视图控制器是一个"演练"是由一个UIScrollViewUIPageControl是应该"悬停"在界面上,所以你可以在边缘略微看到它的背景.

animation transparency cocoa-touch uiviewcontroller ios

7
推荐指数
1
解决办法
3646
查看次数

iOS:将视图旋转应用于模态视图下的视图控制器

我一直在关注这个问题的解决方案,以显示透明背景的视图.我遇到的问题是,一旦显示模态视图控制器,底层视图就不再旋转了.

例如,如果A是我的视图控制器,则B是我的模态视图.问题如下.我目前的设备是纵向A显示的.然后我以B模态呈现.然后我旋转我的设备,B随之旋转,但A保持原样.

请有人建议如何处理这种旋转,以便底层视图(A)也被旋转?

objective-c uiviewcontroller ipad modalviewcontroller ios

5
推荐指数
1
解决办法
4296
查看次数