0

我必须有一个带有 9 个选项卡的 tabBar,所以我添加了一个带有 9 个按钮的 Srollview(MHScrollViewController) 而不是 tabBar。单击每个按钮时,我将 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 作为子视图。在 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 上推送一个新的视图控制器。我可以推送,但滚动视图隐藏在此视图控制器下。

4

3 回答 3

2

UINavigationController will cover all its contents with newly pushed controller anyway, so you need to take your scrollview with buttons outside of navigationcontroller.

于 2013-06-13T15:00:32.773 回答
1

设计 UI 时要注意 UIViewController 父/子关系和责任。

控制器拥有一个主 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)

}
于 2013-06-13T15:10:56.230 回答
0

您可以按标准方式拥有一个带有 9 个选项卡的选项卡栏。它将自动创建一个“更多”选项卡。它可能不像你想要的那样光滑。

于 2013-06-13T15:19:03.070 回答