使用背景颜色为“clear”推出新的视图控制器。

3
我有两个视图控制器,一个是oneVC.swift,另一个是twoVC.swift。 我想在oneVC.swift上显示twoVC.swift,作为覆盖层,同时使twoVC.swift的背景颜色透明。请参见附件。

oneVC.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并不是实现你所要达到目的的途径。 - ThunderStruct
使用委托,通知oneVC用户在twoVC上做了什么。 - Andrea
你需要在 TwoVC 之前添加一个导航控制器,将其连接到 TwoVC 并为其指定故事板标识符,按照常规代码呈现该导航控制器。这样,你就可以从该导航控制器推送到其他视图控制器了。 - Jitendra Modi
问题出在self.navigationController!.present(homeVC, animated: false, completion: nil)! - Vikas Mishra
2个回答

0
问题出在于: self.navigationController!.present(homeVC, animated: false, completion: nil) 这意味着您正在导航控制器上呈现homeVC。呈现视图控制器不会将其添加到导航堆栈中。因此,要解决此问题,您需要将homeVC推入而不是呈现它。

1
如果你这样做:通过透明度是绝对不可能“看到”下面的那个。 - Fattie

0

我的第一个ViewControllerPeopleViewController,第二个是PopUpViewController,还要检查图片。我的代码是用Objective-C编写的,你可以转换成Swift。检查图片

-(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];
    }

但是这种技术有一个缺点,我们可以进一步推动任何其他控制器。 - Ankit Saini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接