繁体   English   中英

无法将一个视图控制器显示在另一个视图控制器上

[英]Can't show one view controller on top of another

我试图显示一个视图控制器从UITableView的另一个。 当用户单击按钮之一时,我希望视图控制器出现在用户按下按钮时所在的视图控制器上方。 可以这样说,用户处于提要视图中,当他们单击按钮时,视图控制器将在提要视图控制器上滑动并带有模糊效果。 因此,基本上,旧的视图控制器将充当新视图控制器的模糊背景。 我正在尝试实现类似tumblr的功能。

这是我在AppDelegate中的代码:

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    if ([viewController.title isEqualToString:@"Create"]) {


        CreateOptionViewController *createOptionViewController = [[CreateOptionViewController alloc] init];
        [viewController addChildViewController: createOptionViewController];
        createOptionViewController.view.frame = viewController.view.bounds;
        [viewController.view addSubview: createOptionViewController.view];
        [viewController.view bringSubviewToFront:createOptionViewController.view];
        [createOptionViewController didMoveToParentViewController: viewController];

        return NO;

    }

    return YES;
}

这是我要实现的目标:

在此处输入图片说明

传递给此方法的viewController是最终被选择的视图控制器。 如果返回“ NO”,则该视图控制器将永远不会被选中。

例如,您有一个带有2个标签的标签栏控制器,并且默认情况下选择了“标签1”。 如果用户点击“选项卡2”,则下面的函数将被调用,“ viewController”将是属于“选项卡2”的视图控制器。 如果此函数返回“是”,则将附加到“选项卡2”的视图控制器置于最前面。 如果函数返回“ NO”,则什么也不会发生。 表示未显示与“选项卡2”关联的视图控制器。

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

您的代码尝试将子视图控制器添加到将不会显示的视图控制器。 由于该方法返回“ NO”,因此“ viewController”不是最重要的。

 [viewController addChildViewController: createOptionViewController];

您需要将“ createOptionViewController”作为childViewController添加到当前正在显示的视图控制器中。 在这种情况下,您可能希望将其添加为

tabBarController.selectedViewController

    CreateOptionViewController *createOptionViewController = [[CreateOptionViewController alloc] init];
    UIViewController *selectedVC = tabBarController.selectedViewController;

     [selectedVC addChildViewController: createOptionViewController];
     createOptionViewController.view.frame = viewController.view.bounds;
     [selectedVC.view addSubview: createOptionViewController.view];
     [selectedVC.view bringSubviewToFront:createOptionViewController.view];
     [createOptionViewController didMoveToParentViewController: viewController];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM