15

カスタマイズされた UITabBar があり、AppDelegate で次のコードを使用します。

- (void)tabBarController:(MainUITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[self customizeTabBar];
}


- (void)customizeTabBar {

    NSLog(@"*******customizeTabBar*******");
    UIImage *tabBackground = [[UIImage imageNamed:@"unselectedtab"]
                  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    // Set background for all UITabBars
    [[UITabBar appearance] setBackgroundImage:tabBackground];
    // Set tint color for the images for all tabbars
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
    // Set selectionIndicatorImage for all tabbars
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"selectedtab"]];

} 

- (void)tabBarController:(MainUITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
    NSLog(@"*******didEndCustomizingViewControllers*******");
}

これは iOS5 以降では問題ありませんが、7 では最初の TabBarItem の最初のロード時にアイテム インジケータが白く、ボタンが選択されているように見えますが、「selectedTab」イメージはロードされません。

別のタブを押すと、新しいタブが赤くなり、正しく表示されます。これは、最初のタブ バー項目またはその後に選択されたタブ バー項目と同様です。最初の起動時にのみ機能しません。

CustomizeTabBar が呼び出されますが、選択した画像は最初の起動時に表示されません。

didEndCustomizingViewControllers はまったく呼び出されないようです。

これは、iOS7 のエミュレータまたはデバイスでは機能しませんが、iOS5、6 では機能します。

何か案は?前もって感謝します。

4

5 に答える 5

2

わかった。

最善の修正ではありませんが、提出する必要があります。

TabBars 属性インスペクター (xcode 5 を使用) の appdelegate およびプロジェクトの xib ファイル (古いプロジェクト) のカスタマイズ コードを削除し、タブ バーの背景と選択画像を追加します。

これは、appdelegate のカスタマイズ コードを必要とせずに ios7 で機能します。

iOS5 + 6 より前 (このアプリは 5 以降のみをサポート) の場合、まだコードが必要なので、バージョンの簡単なチェックを追加し、コードをそのままにしました。

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

if(SYSTEM_VERSION_LESS_THAN(@"7.0"))

    {

        UIImage *tabBackground = [[UIImage imageNamed:@"unselectedtab"]

                                  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

        // Set background for all UITabBars

        [[UITabBar appearance] setBackgroundImage:tabBackground];
    [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];

    // Set tint colour for the images for all tabbars

    [[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];

    // Set selectionIndicatorImage for all tabbars

    [[UITabBar appearance] setSelectionIndicatorImage:nil];

    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"selectedtab.png"]];

}
于 2013-09-17T04:13:33.327 に答える
1

iOS 7 で新しいアプリのデザインを行うときにも、同じ問題が発生したと思います!! iOS 7 は、私たち全員が異なることに慣れているため、より多くの異なるものを構築しています。

ここで私が理解しているように、私たちは全員ストーリーボードを使用しており、そのセグエをコードに統合することができませんでした! :) したがって、これに関するすべての StackOverFlow Answers のほとんどを試した後、コードを台無しにしないことを選択しました! :) なぜなら、Goody Good Interface Builder (IB)Story Boarding Toolを与えたのに、なぜそうしたいのですか?

質問:
選択したタブの画像 (タブ バー専用の背景画像) を設定すると、コードで設定した画像でどのタブが選択されているかが表示されません...???

以下は、この問題を解決
するために行った StoryBoard 設定のスクリーンショットです。

via ドキュメント アウトライン パネルから TabBarController を選択します。
via ドキュメント アウトライン パネルから TabBarController を選択します。

ユーティリティ パネルからタブ バーの設定を行います。
ユーティリティ パネルからタブ バーの設定を行います。

次に、プログラムを実行するように設定します! アプリが最初に最初のタブ ビューを表示するときに最初のタブが選択されていることがわかり、それぞれが選択されたときにすべてのタブ バー インジケーターにどの画像を表示する必要があるかがわかります。:)
皆さんが手がかりを得ることを願っています!!! 私があなたを助けたら、私は幸せです!!! しかし、私があなたの時間を無駄にしてしまったなら、私はとても申し訳ありません!!! :(しかし、私を信じてください、これは私を魅力的に働きました!!!

于 2014-01-26T07:15:16.693 に答える
0
- (void)customizeTabBar {

 UIImageView *customizeTabBar = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,320.0,50)];
customizeTabBar.image=[UIImage imageNamed:@"Tab_bar.png"];

firstTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab1.png"] highlightedImage:[UIImage imageNamed:@"tab11.png"]];
[firstTab setFrame:CGRectMake(8.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: firstTab];

secondTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab2"] highlightedImage:[UIImage imageNamed:@"tab22"]];
[secondTab setFrame:CGRectMake(115.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: secondTab];

thirdTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab3"] highlightedImage:[UIImage imageNamed:@"tab33"]];
[thirdTab setFrame:CGRectMake(223.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: thirdTab];
self.tabBar.tag=10;
[self.tabBar addSubview:customizeTabBar];

}
于 2013-09-16T05:47:12.660 に答える