0

9 つのタブを持つ tabBar が必要だったので、tabBar の代わりに 9 つのボタンを持つ 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;

1 つのタブ (ボタン) について言うと、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 ページに 2 つのボタンができました。クリックすると、MHBikesViewController に新しいビューコントローラーをプッシュしたいと考えています。プッシュすることはできますが、scrollView はこのビューコントローラーの下に隠されます。

4

3 に答える 3

2

UINavigationController はとにかく、新しくプッシュされたコントローラーですべてのコンテンツをカバーするため、ナビゲーションコントローラーの外側にあるボタンでスクロールビューを取得する必要があります。

于 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 に答える