UIScrollView常用于不同的viewControllers

时间:2013-06-13 14:30:32

标签: ios uiscrollview uinavigationcontroller

我必须有一个带有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下。

3 个答案:

答案 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个标签。它会自动创建一个“更多”选项卡。它可能不像你想要的那样光滑。