5

メインコントローラーとして UITabBarController を持つアプリケーションがあります。

ユーザーがボタン(タブバーではなく、他のボタン)をタップすると、新しい UIViewController を UITabBarController 内に追加して表示したいのですが、新しい UITabBarItem をタブバーに表示したくありません。そのような行動を達成する方法は?

tabBarController.selectedViewController配列にないビュー コントローラにプロパティを設定しようとしましtabBarController.viewControllersたが、何も起こりません。View ControllerをtabBarController.viewControllers配列に追加すると、新しいアイテムがタブバーに自動的に表示されます。

アップデート

Levi のおかげで、タブ バー コントローラーを拡張して、 に存在しないコントローラーを処理できるようになりました.viewControllers

@interface MainTabBarController : UITabBarController

/** 
 * By setting this property, tab bar controller will display
 * given controller as it was added to the viewControllers and activated
 * but icon will not appear in the tab bar.
 */
@property (strong, nonatomic) UIViewController *foreignController;

@end


#import "MainTabBarController.h"

@implementation MainTabBarController

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
  self.foreignController = nil;
}

- (void)setForeignController:(UIViewController *)foreignController
{
  if (foreignController) {
    CGFloat reducedHeight = foreignController.view.frame.size.height - self.tabBar.frame.size.height;
    foreignController.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, reducedHeight);

    [self addChildViewController:foreignController];
    [self.view addSubview:foreignController.view];
  } else {
    [_foreignController.view removeFromSuperview];
    [_foreignController removeFromParentViewController];
  }

  _foreignController = foreignController;
}

@end

このコードは、「外部」コントローラーのビュー サイズを正しく設定し、ユーザーがタブ バーで項目を選択するとそれを削除します。

4

2 に答える 2

2

それをプッシュするか (ナビゲーション コントローラーがある場合)、そのビューを表示されているビュー コントローラーのビューに追加し、それを子ビュー コントローラーとしても追加します。

于 2013-04-06T14:11:51.050 に答える
0

新しいView Controllerを次のいずれかで提示できます。

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion;

または、いずれかUIViewControllersが 内にあるUINavigationController場合は、次のことができます。

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
于 2013-04-06T13:16:50.573 に答える