1

UIApperanceを使用せずに、すべてのuibarbuttonitemsをカスタマイズして背景画像を表示する方法はありますか?残念ながら、コードベースにはいくつかの制限があり、UIAppearanceを使用できないため、別の方法を探しています。

前もって感謝します。

編集:UIBarButtonItemをサブクラス化することでこれを行うことができ、ほとんどのボタンで機能します...しかし、UITableView編集ボタンやUINavigationControllerバックボタンなどのデフォルトボタンでこれを行う方法を具体的に知りたいと思います。

ありがとう!

4

3 に答える 3

2

このようなサブクラスを作成することもできます。まず、UIBarButtonItemのサブクラスを作成します。私のCustomBarButtonItem.hは次のようになります。

@interface CustomBarButtonItem : UIBarButtonItem

+ (CustomBarButtonItem *)sharedInstance;
- (UIBarButtonItem *)backButtonwithTarget:(id)target andAction:(SEL)action;


@end

次に、CustomBarButtonItem.m内でこのようになります。

@implementation CustomBarButtonItem

static CustomBarButtonItem * _sharedInstance = nil;

+ (CustomBarButtonItem *)sharedInstance
{
    if (_sharedInstance != nil)
    {
        return _sharedInstance;
    }
    _sharedInstance = [[CustomBarButtonItem alloc] init];

    return _sharedInstance;
}

- (UIBarButtonItem *)backButtonwithTarget:(id)target andAction:(SEL)action
{
    UIImage *backImage = [UIImage imageNamed:@"back_btn_normal.png"];
    UIImage *backPressed = [UIImage imageNamed:@"back_btn_hilight.png"];
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [backButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    [backButton setBackgroundImage:backImage forState:UIControlStateNormal];
    [backButton setBackgroundImage:backPressed forState:UIControlStateHighlighted];

    const CGFloat BarButtonOffset = 5.0f;
    [backButton setFrame:CGRectMake(BarButtonOffset, 0, backImage.size.width, backImage.size.height)];

    UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, backImage.size.width, backImage.size.height)];
    [containerView addSubview:backButton];

    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:containerView];
    return item;
}
@end

次に、カスタムのNavigationItem(NavigationBarのボタン)を作成する場合は、以下のコードをカスタムとして配置できます。

- (void)viewDidLoad
{
    self.navigationItem.leftBarButtonItem = [[CustomBarButtonItem sharedInstance] backButtonwithTarget:self andAction:@selector(searchButtonTapped:)];
}

私のコードはすべて正常に機能しています。うまくいけば、それはあなたを助けるでしょう。

于 2012-11-13T15:28:29.157 に答える
0

あなたはこのようなことをすることができます。プロジェクトからコピーしただけです。

   _leftBarButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:[self imageButton]]
                                                          style:UIBarButtonItemStyleBordered
                                                         target:self
                                                         action:@selector(showLeftViewController)];

    [navController.navigationBar.topItem setLeftBarButtonItem:_leftBarButton];
于 2012-11-13T15:20:35.993 に答える
0

これを行うには:UINavigationBarにカテゴリを作成し、メソッドdrawRectをオーバーライドします

@implementation UINavigationBar (CustomBackground)
 - (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed: @"background"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

このコードを使用すると、プロジェクト内のすべてのUINavigationBarの背景を変更できます。

于 2012-11-14T10:31:31.157 に答える