web-dev-qa-db-ja.com

iPhoneアプリでUIToolBarにカスタム背景を与えることはできますか?

通常の青/黒のフェードアウトではなく、UIToolBarに画像からカスタム背景を与えることは可能ですか?

ビューに背景を与えてUIToolBarの不透明度を設定しようとしましたが、それはその上のUIBarButtonの不透明度にも影響します。

25
RusHughes

ここで私自身の質問に答えます!!! drawRect関数をオーバーライドしてUIToolbarの実装を作成すると、次のようなことができます:)

    @implementation UIToolbar (CustomImage)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"nm010400.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
40
RusHughes

UIToolbarはUIViewを継承しています。これは私のためにうまくいきました:

[topBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:BAR_BKG_IMG]] autorelease] atIndex:0];
16
Ajay Gautam

ロレートの答えのわずかに変更されたバージョン。これは、iOS4および5で機能します。

// Set the background of a toolbar
+(void)setToolbarBack:(NSString*)bgFilename toolbar:(UIToolbar*)toolbar {   
    // Add Custom Toolbar
    UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:bgFilename]];
    iv.frame = CGRectMake(0, 0, toolbar.frame.size.width, toolbar.frame.size.height);
    iv.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    // Add the tab bar controller's view to the window and display.
    if([[[UIDevice currentDevice] systemVersion] intValue] >= 5)
        [toolbar insertSubview:iv atIndex:1]; // iOS5 atIndex:1
    else
        [toolbar insertSubview:iv atIndex:0]; // iOS4 atIndex:0
    toolbar.backgroundColor = [UIColor clearColor];
}
10
Chris

これは私がiOS 4および5の互換性のために使用するアプローチです:

if ([toolbar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) {
    [toolbar setBackgroundImage:[UIImage imageNamed:@"toolbar-background"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
} else {
    [toolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolbar-background"]] autorelease] atIndex:0];
}

この部分を-(void)viewDidLoad{}に追加するだけです

[toolBarName setBackgroundImage:[UIImage imageNamed:@"imageName.png"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
7
Mateus

IOS5以降、Appearance APIを使用できます。

[[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar_bg"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
2
Jasper

Idimmuの回答を使用していて、デフォルトではなくbarbuttonitemsに色を付けたい場合は、次の数行のコードをカテゴリに追加することもできます。

UIColor *color = [UIColor redColor];
self.tintColor = color;
2
dnstevenson

IOS 5に準拠するには、次のようなことができます

-(void) addCustomToolbar {

    // Add Custom Toolbar
    UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"customToolbar.png"]];
    img.frame = CGRectMake(-2, -20, img.frame.size.width+4, img.frame.size.height);

    // Add the tab bar controller's view to the window and display.

    if( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO( @"5.0" ) )
       [self.tabBarController.tabBar insertSubview:img atIndex:1]; // iOS5 atIndex:1
    else
      [self.tabBarController.tabBar insertSubview:img atIndex:0]; // iOS4 atIndex:0

    self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];

    // Override point for customization after application launch.
    [self.window addSubview:tabBarController.view];

}
1
loretoparisi

これは私にとってはうまくいきます:

ToolbarOptions *tbar = [[ToolbarOptions alloc] init];
[tbar setToolbarBack:@"footer_bg.png" toolbar:self.toolbarForPicker];
[tbar release];

#import <Foundation/Foundation.h>
@interface ToolbarOptions : NSObject {

}
-(void)setToolbarBack:(NSString*)bgFilename toolbar:(UIToolbar*)toolbar;
@end

#import "ToolbarOptions.h"


@implementation ToolbarOptions

-(void)setToolbarBack:(NSString*)bgFilename toolbar:(UIToolbar*)bottombar {   
// Add Custom Toolbar
UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:bgFilename]];
iv.frame = CGRectMake(0, 0, bottombar.frame.size.width, bottombar.frame.size.height);
iv.autoresizingMask = UIViewAutoresizingFlexibleWidth;
// Add the tab bar controller's view to the window and display.
if([[[UIDevice currentDevice] systemVersion] intValue] >= 5)
    [bottombar insertSubview:iv atIndex:1]; // iOS5 atIndex:1
else
    [bottombar insertSubview:iv atIndex:0]; // iOS4 atIndex:0
bottombar.backgroundColor = [UIColor clearColor];
}

@end
0
Melvin

これは、基本的にUIToolBarに新しいプロパティを追加するカテゴリで行うことができます。 drawRectのオーバーライドは機能しますが、必ずしも将来の証拠とは限りません。カスタムUINavigationBarに対する同じ戦略がiOS 6で機能しなくなりました。

これが私がやっている方法です。

.hファイル

 @ interface UIToolbar(CustomToolbar)
 
 @ property(nonatomic、strong)UIView * customBackgroundView; 
 
 @ end 

.mファイル

#import "CustomToolbar.h" 
#import 
 
 static char TIToolbarCustomBackgroundImage; 
 
 @ implementation UIToolbar(CustomToolbar)
 
-(void)setCustomBackgroundView:(UIView *)newView {
 UIView * oldBackgroundView = [self customBackgroundView]; 
 [oldBackgroundView removeFromSuperview]; 
 
 [self willChangeValueForKey:@ "tfCustomBackgroundView"]; 
 objc_setAssociatedObject(self、&TIToolbarCustomBackgroundImage、
 newView、
 OBJC_ASSOCIATION_RETAIN); 
 [self @ "tfCustomBackgroundView"]; 
 
 if(newView!= nil){
 [self addSubview:newView]; 
} 
} 
 
-(UIView *)customBackgroundView {
 UIView * customBackgroundView = objc_getAssociatedObject(self、&TIToolbarCustomBackgroundImage); 
 
 return customBackgroundView; 
} 

@終わり

ビューコントローラコードでは、たとえばviewDidLoad

 if(self.navigationController.toolbar.customBackgroundView == nil){
 self.navigationController.toolbar.customBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@ "navigation_bar_background.png"] ]; 
 self.navigationController.toolbar.customBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
} 
0
Jared Egan