2

これも手伝ってくれるといいのですが...カスタムの背景画像を追加してナビゲーションバーをカスタマイズしたかったのです。私は完璧ですが、NavigationSwizzleと呼ばれる少し複雑な方法を見つけました。以前のプロジェクトでは深刻な問題は発生しませんでしたが、今は行き詰まっています...

AppDelegateから、この静的メソッドを呼び出しています。

@implementation SCAppUtils
+ (void)customizeNavigationController:(UINavigationController *)navController
{
//Customizing navigation BAR
UINavigationBar *navBar = [navController navigationBar];
[navBar setTintColor:kSCNavBarColor];

//Customizing TOOLBAR
[navController setToolbarHidden:NO animated:YES];

UIToolbar *toolBar = [navController toolbar];

UIImageView *imageView = (UIImageView *)[navBar viewWithTag:kSCNavBarImageTag];
UIImageView *imageView2 = (UIImageView *)[toolBar viewWithTag:kSCNavBarImageTag];

if (imageView == nil)
{
    Utilities *utilities = [[Utilities alloc]init];

    UIImage *img = [UIImage imageNamed:@"nav-bar-background.png"];
    UIImage *img2 = [UIImage imageNamed:@"toolbar-background.png"];

    imageView = [[UIImageView alloc] initWithImage:img];
    imageView2 = [[UIImageView alloc] initWithImage:img2];  

    [imageView setTag:kSCNavBarImageTag];
    [imageView2 setTag:kSCNavBarImageTag];

    [navBar insertSubview:imageView atIndex:0];
    [toolBar insertSubview:imageView2 atIndex:0];   

    [imageView release];
    [imageView2 release];
    [utilities release];

}

}

rootNavigationControllerで、スタック上で2番目のView Controllerを押して呼び出した後、右ボタンself.title、activityIndi​​catorが表示されません。コメントするか、atIndex:-1[navBar insertSubview:imageView atIndex:0]行に設定すると; 次にボタンが表示されますが、カスタマイズした背景がなくなり、通常のiPhoneナビゲーションタブが表示されます。

rootNavigationControllerdidSelectRowAtIndexには、次のものがあります。

//ADD BACK BUTTON TO VIEW
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton; 

//Home Button color
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:166.0 / 255 green:179.0 / 255 blue:191.0 / 255 alpha:1.0];

//PUSH TO NEXT VIEW
[self.navigationController pushViewController:detailViewController animated:YES];

前もって感謝します...

さらにコードや説明が必要な場合は、遠慮なく私に聞いてください...

よろしく、ルカ

編集:

わかりました。この質問をもっと簡単にすることができます。ナビゲーションバーにカスタムの背景画像があります。この画像は明らかに私の

self.navigationItem.title = @"TITLE";

バックグラウンドにあるimageViewの0.3にアルファを設定すると、タイトルが表示されます。

imageView = [[UIImageView alloc] initWithImage:image];
[imageView setAlpha:0.3];
[imageView setTag:kSCNavBarImageTag];
[navBar insertSubview:imageView atIndex:0];

だから問題は、navigationItem.titleをフロントに送信するにはどうすればよいですか?UIViewクラスの子孫ですか?

編集2: 本当に奇妙なことは、rootControllerにタイトルが(背景画像の上に)表示されているのに、別のviewControllerを押した後、タイトルが背景imageViewの後ろに表示されることです。

4

3 に答える 3

1

正直なところ、このコードを main.m に追加するのを忘れていたと思います。main.m は次のようになります。

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "SCClassUtils.h"

int main(int argc, char *argv[])
{
    [SCClassUtils swizzleSelector:@selector(insertSubview:atIndex:)
                          ofClass:[UINavigationBar class]
                     withSelector:@selector(scInsertSubview:atIndex:)];
    [SCClassUtils swizzleSelector:@selector(sendSubviewToBack:)
                          ofClass:[UINavigationBar class]
                     withSelector:@selector(scSendSubviewToBack:)];

    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
于 2012-02-02T00:44:03.500 に答える
0

私は自分の仕事のための解決策を見つけました。ナビゲーションバーに適合するすべての画像と色でビュー (viewBackground) を作成し、それを画像に変換して背景のように使用します

UIGraphicsBeginImageContextWithOptions(viewBackground.bounds.size, viewBackground.opaque, 0.0);
[viewBackground.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[[UINavigationBar appearance]            setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
于 2016-10-11T17:49:23.933 に答える
0

代わりに、これを試して Navigationbar をカスタマイズすることをお勧めします。私は自分のアプリでそれを使用していますが、それは魅力のように機能します

UIImage *theImage = [UIImage imageNamed:@"barImage.png"];
[self.navigationController.navigationBar insertSubview:[[[UIImageView alloc] initWithImage:theImage] autorelease] atIndex:0];

ボタンが表示されない問題が解決するかどうかを確認してください。

于 2011-05-06T17:47:21.130 に答える