我试图在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;
}
这是我想要实现的目标:
答案 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];