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

时间:2014-02-17 19:32:09

标签: ios objective-c uiviewcontroller uitabbar

我试图在UITableView上显示另一个视图控制器。当用户单击其中一个按钮时,我希望视图控制器显示在用户按下按钮时的视图控制器上。因此,假设用户在Feed视图中,当他们单击按钮时,视图控制器将在模糊的情况下在Feed视图控制器上滑动。所以基本上旧的视图控制器将作为新视图的模糊背景。我正在努力实现像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;
}

这是我想要实现的目标:

enter image description here

1 个答案:

答案 0 :(得分:0)

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

例如,您有一个带有2个选项卡的标签栏控制器,默认情况下选择“选项卡1”。如果用户点击“选项卡2”,则会调用下面的函数,“viewController”将是属于“选项卡2”的视图控制器。如果此函数返回YES,则附加到“选项卡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];