0

使用したいタブ バー ライブラリを見つけましたが、アプリケーションにストーリーボードを使用する必要があります。

このライブラリが xib で動作することを確認したので、自分のストーリーボード アプリで動作するように調整することにしました。しかし、私はそれを機能させることができませんでした。

ライブラリはここにあります: http://www.cocoacontrols.com/controls/tbtabbar

ライブラリをストーリーボードで動作させるにはどうすればよいですか。それができない場合、メインウィンドウ内で uinavigationcontroller を使用するにはどうすればよいですか。

ありがとう

編集: これは、ビュー コントローラーを交換するコードです。

 -(void)switchViewController:(UIViewController *)viewController {
UIView *currentView = [self.view viewWithTag:SELECTED_VIEW_CONTROLLER_TAG];
[currentView removeFromSuperview];

viewController.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height-(tabBar.frame.size.height));

viewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG;

[self.view insertSubview:viewController.view belowSubview:tabBar];
}
4

1 に答える 1

1

私は自分の答えを完全に作り直し、サンプル プロジェクトを作成して、2 回目は何も見逃さないようにしました。

TBViewController のストーリーボード サブクラスで、すべてのビュー コントローラー (識別子付き) を作成できるはずです。これを行うには、UIViewController をクリックし、ID インスペクター (cmd alt 3) に移動してから、「TBViewController」と入力します。すべてが正しく機能していれば、オートコンプリートする必要があります。次のステップは、タブ コントローラーのタブを作成することです。TBTabBar コントローラーに追加する前に、各タブに 3 つの値が必要です。

  1. 通常の画像
  2. ハイライトされた画像
  3. ボタンに関連付けられたビュー コントローラー

以下は、パラメータとして 3 つの要件すべてを受け入れるこれらの TBTabButton オブジェクトをインスタンス化するために作成したカスタム メソッドです。

-(TBTabButton*)TBTabButtonWithStoryBoardID:(NSString*)identifier andButtonImageNamed:(NSString*)normalImageTitle andHighlightedImageNamed:(NSString*)highlightImageTitle{

     //Create the tab bar and assign normal image
     TBTabButton *tabBarButtonItem = [[TBTabButton alloc] initWithIcon:[UIImage imageNamed:normalImageTitle]];

     //Assign Highlighted image
     tabBarButtonItem.highlightedIcon = [UIImage imageNamed:highlightImageTitle];

     //Fetch the subclassed view controller from storyboard and assign as viewController
     tabBarButtonItem.viewController = [self TBViewControllerFromStoryboardWithIdentifier:identifier];

     return tabBarButtonItem;
}

ビュー コントローラーは、次のコード ブロックのメソッドを使用して、ストーリーボードから取得できます。

-(TBViewController*)TBViewControllerFromStoryboardWithIdentifier:(NSString*)identifier{

    //instantiateViewControllerWithIdentifier returns a UIViewController Object
    UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

    //check if UIViewController is a subclassed TBViewController
    if([viewController isKindOfClass:[TBViewController class]]){

        //if it is then send it back as the correct type
        return (TBViewController*)viewController;
    }
    return nil;
}

これで、「すぐに追加できる」TBTabButton オブジェクトを作成するメソッドができました。このメソッドを使用して、タブ バーに必要な各ボタンを作成します。これらをインスタンス化したら、それらを NSArray に追加して、TBTabBar オブジェクトを作成するためのパラメーターとして渡すことができるようにする必要があります。あとは、UITabBar オブジェクトをビューに追加し、デフォルトに基づいて表示するように設定するだけです。

-(void)setTBTabBar{

    //Instantiate your tab TBTabButtons

    TBTabButton *tab1 = [self TBTabButtonWithStoryBoardID:@"tab1"
                              andButtonImageNamed:@"favoritesIcon.png"
                               andHighlightedImageNamed:@"favoritesIconHighlighted.png"];

    TBTabButton *tab2 = [self TBTabButtonWithStoryBoardID:@"tab2"
                              andButtonImageNamed:@"mentionsIcon.png"
                              andHighlightedImageNamed:@"mentionsIconHighlighted.png"];

    TBTabButton *tab3 = [self TBTabButtonWithStoryBoardID:@"tab3"
                              andButtonImageNamed:@"messagesIcon.png"
                              andHighlightedImageNamed:@"messagesIconHighlighted.png"];


    //Add them to an array
    NSArray *arrayOfTBViewControllers = [NSArray arrayWithObjects: tab1, tab2, tab3, nil];

    //Instantiate your TBTabBar object with your array of TabButtons. Set this view as delegate
    tabBar = [[TBTabBar alloc] initWithItems:arrayOfTBViewControllers];
    tabBar.delegate = self;

    //Add it to the view and set it to show defaults
    [self.view addSubview:tabBar];
    [tabBar showDefaults];
}

このメソッドは、-(void)viewDidLoad メソッドで呼び出す必要があります。

他に行う必要があるのは、次のとおりです。

  1. _prefix.pch ファイルで SELECTED_VIEW_CONTROLLER_TAG 98456345 を定義します
  2. コンパイル済みソースの下に「-fno-objc-arc」フラグを追加して、インポートされたファイルの ARC をオフにします。

うまくいけば、これはあなたが抱えていた問題に対処します。これは、少し混乱するかもしれない1つのことのようでした. README の他の手順を正しく実行している限り、これはうまく機能するはずです。

それでもうまくいかない場合はお知らせください。上記のコード用に作成した実際の例へのリンクを投稿できます。

于 2012-08-28T11:40:30.280 に答える