0

次のカテゴリ コードを使用して、ナビゲーション バーの背景画像を変更しています。

#import <Foundation/Foundation.h>

@interface UINavigationBar (CustomImage)
- (void) setBackgroundImage:(UIImage*)image;
- (void) clearBackgroundImage;
@end


#import "UINavigationBar+CustomImage.h"

@implementation UINavigationBar (CustomImage)
- (void) setBackgroundImage:(UIImage*)image {
    if (image == NULL) return;
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    [self insertSubview:imageView atIndex:0];
    [imageView release];
}

- (void) clearBackgroundImage {    
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSArray *mySubviews = [self subviews];

    for (int i = [mySubviews count] - 1; i >= 0; i--)
    {
        if ([[mySubviews objectAtIndex:i] isMemberOfClass:[UIImageView class]])
        {
            [[mySubviews objectAtIndex:i] removeFromSuperview];
            return;
        }
    }

    [pool release];
}
@end

そして、次のコードを使用して、ビューにカスタムの戻るボタンを生成しています

UIButton *btnBack = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
[btnBack addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
[btnBack setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
UIBarButtonItem *barBtnBack = [[UIBarButtonItem alloc] initWithCustomView:btnBack];
self.navigationItem.leftBarButtonItem = barBtnBack;

[btnBack release];
[barBtnBack release];

しかし、ほとんどの場合、ボタンは背景画像の下に隠れており、ランダムに表示されることもあります。なぜこうなった?画像がインデックス 0 に挿入される問題が何であるかわからないので、常に遅れているはずだと理解しています。助けてください。

4

3 に答える 3

0

画像を追加した後、ボタンを作成してみてください。

于 2011-07-27T09:39:11.193 に答える
0

ナビゲーション バーを読み込んでいるクラスのナビゲーション バーの背景を変更するには、次のコードを試してください。

@interface UINavigationBar (MyCustomNavBar)
@end
@implementation UINavigationBar (MyCustomNavBar)
- (void) drawRect:(CGRect)rect 
{
    UIImage *barImage = [UIImage imageNamed:@"image.png" ];
    [barImage drawInRect:rect];
}
@end
于 2011-07-27T09:43:51.857 に答える
0

メソッド Praveen S を使用して、次の背景画像名のグローバル変数を作成し、それを viewDidLoad メソッドに設定してから、draw rect メソッドで、draw rect にハードコーディングするのではなく、変数に格納されている imageName を使用できます。

于 2011-07-27T10:22:07.590 に答える