【问题标题】:Present a modal view controller with transparent background呈现具有透明背景的模态视图控制器
【发布时间】:2015-02-20 07:48:42
【问题描述】:

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

我正在使用侧边菜单控制器 (RESideMenu)。

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

在需求方面,我想介绍一个视图控制器

来自推送的视图控制器(在导航层次结构中)

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

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

我很确定这在很多情况下都可以使用,无论有(或没有)侧边菜单,甚至导航控制器。

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

【问题讨论】:

    标签: ios uiviewcontroller uinavigationcontroller presentviewcontroller


    【解决方案1】:

    假设,我们在FirstViewController

    //Obj-C
    - (void) presentSecondVC {
        SecondViewController *vc = [[SecondViewController alloc] init];
        [self addChildViewController:vc];
        [self didMoveToParentViewController:vc];
    }
    
    //Swift
    func presentSecondVC() {
        let vc = SecondViewController.init()
        self.addChildViewController(vc)
        self.didMove(toParentViewController: vc)
    }
    

    你们中的一些人可能需要像这样编写上述方法,

    //Obj-C
    - (void) presentSecondVC {
        SecondViewController *vc = [[SecondViewController alloc] init];
        vc.view.frame = CGRectMake(0,0,width,height); //Your own CGRect
        [self.view addSubview:vc.view]; //If you don't want to show inside a specific view
        [self addChildViewController:vc];
        [self didMoveToParentViewController:vc];
        //for someone, may need to do this.
        //[self.navigationController addChildViewController:vc];
        //[self.navigationController didMoveToParentViewController:vc];   
    }
    
    //Swift
    func presentSecondVC() {
        let vc = SecondViewController.init()
        vc.view.frame = CGRect.init(x: 0, y: 0, width: width, height: height) //Your own CGRect
        self.view.addSubview(vc.view) //If you don't want to show inside a specific view.
        self.addChildViewController(vc)
        self.didMove(toParentViewController: vc)
        //for someone, may need to do this.
        //self.navigationController?.addChildViewController(vc)
        //self.navigationController?.didMove(toParentViewController: vc)
    }
    

    现在在SecondViewController当你想回去的时候

    //Obj-C
    - (void) goBack {
        [self removeFromParentViewController];
    }
    
    //Swift
    func goBack() {
        self.removeFromParentViewController()
    }
    

    玩得好(每个场景):)

    是的,这不会显示动画,就我而言,我在vc 中显示了一个自定义弹出窗口,尽管这段代码看起来不错!

    【讨论】:

    • 致,亲爱的投反对票,请考虑在此处保留您的足迹,并评论您投反对票的原因。学习一些东西并提高我的自我真的很有帮助。我在这里保留我的答案(就像我的问题一样)以帮助您(可能还有其他开发人员)。但是,如果它看起来很糟糕或对您不起作用,那么请随意写下您的话(如果可能的话,您也可以写下您的解决方案)以及您不同意的反对票。我一定会很感激的,谢谢! :)
    • 方法goBack不完整,应该调用removeFromSuperViewUIViewController Class Reference 是给你的。
    • 需要添加[self.view addSubview:vc.view];这两种情况下的行......只有 addChildViewController 什么都不做......
    • 反对的主要原因是您的回答说如何添加子视图控制器而不是如何呈现视图控制器,它们之间存在很大差异。 developer.apple.com/library/content/featuredarticles/… 感兴趣的人可以阅读苹果文档
    • @IraniyaNaynesh,感谢您的光临,几年前我已经提出并回答了这个问题。请随时编辑问题详细信息或我的答案以获得完美的图片。是的,Doovery 的 ATB! :)我不再介意反对者。
    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多