我必须有一个带有9个标签的tabBar,所以我添加了一个带有9个按钮而不是tabBar的Srollview(MHScrollViewController)。单击每个按钮,我将一个viewController作为子视图添加到Srollview。
在AppDelegate中,拥有以下代码:
MHScrollViewController *scrollViewController = [[MHScrollViewController alloc] initWithNibName:@"MHScrollView" bundle:nil];
scrollViewController.managedObjectContext = [self managedObjectContext];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:scrollViewController];
self.window.rootViewController = self.navigationController;
现在说一个标签(按钮),我已将MHBikesViewController添加到MHScrollViewController作为subView。在MHScrollViewController中,我这样做
bikesViewController = [[MHBikesViewController alloc] initWithNibName:@"MHBikesView" bundle:nil];
bikesViewController.managedObjectContext = self.managedObjectContext;
bikesViewController.view.frame = baseViewiPhone.frame;
CGRect theFrame = bikesViewController.view.frame;
theFrame.origin.y = 0;
bikesViewController.view.frame = theFrame;
bikesViewController.navigationController = self.navigationController;
[baseViewiPhone addSubview:bikesViewController.view];
现在,我在MHBikesViewController页面上有两个按钮。单击时,我想在MHBikesViewController上推送一个新的viewcontroller。我可以推送,但scrollView隐藏在这个viewcontroller下。
答案 0 :(得分:2)
UINavigationController无论如何都将使用新推送的控制器覆盖其所有内容,因此您需要使用navigationcontroller外部的按钮获取滚动视图。
答案 1 :(得分:1)
小心UIViewController父/子关系&设计UI时的责任。
控制器拥有一个主UIView及其所有子视图。 将此viewController的视图添加到更复杂的视图层次结构中时,此控制器应该是控制此“容器”UI的viewController的子控件。
问问自己:你的遏制模式是什么?
9个标签和占据屏幕其余部分的一些相关内容?
然后在你的情况下,MHScrollViewController
是爸爸,它拥有可滚动的标签和当前的viewController主视图。它不应该是UINavigationController
(可以是他自己的父母'内容'持有你的MHBikesViewController
)
家长 - >您案件中的儿童容器:
MHScrollViewController
- > UINavigationController
- > MHBikesViewController
添加和删除子viewController是父级的责任。
//(somewhere in MHScrollViewController.m or .h )
@property (nonatomic, strong) UIViewController *newContentController;
@property (nonatomic, weak) UIScrollView *tabsScrollView;
// method for pushing any 'tab' controller
// might be your UINavigationController
- (void)displayTabController:(UIViewController *)vc
{
// remove previous controller
if (self.contentController) {
[self.contentController.view removeFromSuperview];
[self.contentController removeFromParentViewController];
}
//push the new controller, maintaining child/parent relationship
self.contentController = newContentController;
[self.view addSubview:contentController.view];
[self.contentController didMoveToParentViewController:self];
// set frame of contentController so that it stays above scrollView
self.contentController.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - self.tabsScrollView.bounds.size.height)
}
答案 2 :(得分:0)
您可以使用标准方式的标签栏,其中包含9个标签。它会自动创建一个“更多”选项卡。它可能不像你想要的那样光滑。