使用背景颜色“清除”推送新视图控制器

Posted

技术标签:

【中文标题】使用背景颜色“清除”推送新视图控制器【英文标题】:Push New View controller with background color "clear" 【发布时间】:2017-01-24 10:39:33 【问题描述】:

我有两个视图控制器 oneVC.swift 和 twoVC.swift。 我想将 oneVC.swift 上的 twoVC.swift 显示为覆盖,将 twoVC.swift 的背景颜色显示为透明。见附件。

我正在尝试使用以下代码:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let homeVC = storyboard.instantiateViewController(withIdentifier: "twoVC") as! twoVC    
homeVC.providesPresentationContextTransitionStyle = true;
homeVC.definesPresentationContext = true;
homeVC.modalPresentationStyle = .overCurrentContext
self.navigationController!.present(homeVC, animated: false, completion: nil)

这段代码运行良好 但是当前代码的问题是我不能进一步从 twoVC.swift 推送任何新控制器,因为这是通过 oneVC.swift 呈现的。 如果我使用

pushViewController

像这样:

self.navigationController?.pushViewController(homeVC, animated: false)

使用它我无法实现 twoVC.swift 的透明度。 那么有没有可能我可以使用透明度将第二个视图控制器推到第一个视图控制器上

pushViewController

提前致谢。

【问题讨论】:

您是否考虑过使用UIView 并将其覆盖在一个VC 上?可以单独创建一个.xib,按照自己的意愿进行设计,然后使用UIView.transition的方法来模拟UIViewController的推送动画效果。覆盖 VC 通常不是实现您所追求的目标的方法。 使用委托通知 oneVC 用户在 twoVC 上做了某事。 您必须在 twoVC 之前使用一个导航控制器,将其连接到 twoVC 并为其提供故事板标识符,按照正常代码显示该导航控制器。因此,您现在可以从该导航控制器推送到其他视图控制器。 问题出在 self.navigationController!.present(homeVC, animated: false, completion: nil) 【参考方案1】:

我的第一个ViewControllerPeopleViewController,第二个是PopUpViewController 并检查图像。我的代码在 Objective c 中,你可以转换成 swift.check image

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    

         PopUpViewController * popUp = [self.storyboard instantiateViewControllerWithIdentifier:@"PopUpViewController"];

        popUp.nav=self.navigationController;

        [PeopleViewController setPresentationStyleForSelfController:self presentingController:popUp];

        [self presentViewController:popUp animated:YES completion:nil];
    

+ (void)setPresentationStyleForSelfController:(UIViewController *)selfController presentingController:(UIViewController *)presentingController
    
            presentingController.providesPresentationContextTransitionStyle = YES;
            presentingController.definesPresentationContext = YES;

            [presentingController setModalPresentationStyle:UIModalPresentationOverCurrentContext];
    

【讨论】:

但是这种技术有一个缺点,我们可以进一步推动任何其他控制器。【参考方案2】:

问题出在

self.navigationController!.present(homeVC, animated: false, completion: nil).

这意味着您正在通过导航控制器呈现 homeVC。呈现视图控制器不会将其添加到导航堆栈。所以要解决这个问题,你需要推送 homeVC 而不是展示它。

【讨论】:

如果你这样做:绝对不可能通过透明度“看到”下面的内容。

以上是关于使用背景颜色“清除”推送新视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

Popup具有黑色背景,即使它已设置为清除

应用于控制器的背景未应用于故事板swift中的表格视图单元格

iOS:当视图背景颜色为清晰颜色时,图层背景颜色不显示

使用 UIAppearance 设置视图控制器的直接视图背景颜色

如何将图像视图颜色设置为文本字段背景颜色

更改父视图控制器背景颜色