完了ボタンを表すカスタムUIBarButtonItemを作成します。 アプリを国際化できるようにしたいので、テキストを直接編集できるようにします。 「Done」ラベルの長さを考慮に入れて、私は伸縮可能なイメージを設計しました。デフォルトの編集ボタンの背景を直接変更することは可能ですか、またはカスタムUIBarButtonItemが必要ですか?もしそうなら、ラベルの長さに応じて背景のstretchableImageを動的にサイズ変更する方法は何でしょうか?完了UIBarButtonItemの背景画像
答えて
iOS 5.0のみをターゲットに設定している場合は、新しいUIAppearance
のメソッド-setBackButtonBackgroundImage:forState:barMetrics:
を使用してデフォルトの外観を変更することができます。
あなたがiOS版の古いバージョンをサポートする必要がある場合、あなたは、UIBarButtonItem
をサブクラスUIButton
インスタンス変数を追加し、それを作成し、あなたのUIBarButtonItem
のinit
方法で–initWithCustomView:
を呼び出す必要があります。 UIBarButtonItem
はUIView
のサブクラスではないため、カスタムイメージを描画することはできません。 UIBarButtonItem
のwidth
プロパティも手動で設定する必要があります。
@interface MYCustomBarButtonItem : UIBarButtonItem
{
UIButton *button;
}
- (id)initWithTitle:(NSString *)title; // name it in concordance with your needs
@end
#define kButtonHeight 30
#define kButtonTitleFontSize 12
#define kButtonTitlePadding 5
@implementation MYCustomBarButtonItem
- (id)initWithTitle:(NSString *)title
{
button = [UIButton buttonWithType:UIButtonTypeCustom]; // add retain here, and write the dealloc method if you aren't using ARC. Also, release it if self == nil.
self = [super initWithCustomView:button];
if (self) {
UIFont *titleFont = [UIFont boldSystemFontOfSize:kButtonTitleFontSize];
CGSize titleSize = [title sizeWithFont:titleFont];
CGFloat buttonWidth = titleSize.width + kButtonTitlePadding * 2;
button.frame = CGRectMake(0, 0, buttonWidth, kButtonHeight);
self.width = buttonWidth;
[button setTitle:title forState:UIControlStateNormal];
// Set your styles
button.titleLabel.font = titleFont;
// Normal state background
UIImage *backgroundImage = ...; // create your normal stretchable background image
[button setBackgroundImage:backgroundImage forState:UIControlStateNormal];
// Pressed state background
backgroundImage = ...; // create your pressed stretchable background image
[button setBackgroundImage:backgroundImage forState:UIControlStateHighlighted];
// and so on...
}
return self;
}
@end
PS。 button
インスタンスで使用するサブクラスのプロパティtarget
とaction
をオーバーライドすることを忘れないでください。
UIBarButtonItem *btnDone = [[UIBarButtonItem alloc] initWithTitle:@"I am done" style:UIBarButtonItemStyleBordered target:self action:nil];
UIImage *stretchable = [[UIImage imageNamed:@"StretchableImage.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:16];
[btnDone setBackgroundImage:stretchable forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.navigationItem setRightBarButtonItem:btnDone];
A UIBarButtonItemが自動的にラベルの幅に幅です調整しない:
私はあなたの質問を誤解しているかもしれませんが、私はあなたが望むすべて信じているが、これはあります。
@Stanislav Yagloが正しいです。このソリューションはiOS 5でのみ機能します。古いバージョンをターゲットにする場合は、UIBarButtonItemの単純なサブクラスを作成する必要があります。 – simonbs
- 1. 背景画像カルーセルの背景画像
- 2. 背景画像上の背景画像
- 3. 画像を使用してuibarbuttonitemの背景を変更する
- 4. 背景画像
- 5. 背景画像
- 6. 背景画像
- 7. 画像上の背景の背景
- 8. 画像の背景
- 9. ロイヤリティーフリーの画像背景画像のための背景
- 10. CSS:背景色の背景画像
- 11. 背景画像スライドショー?
- 12. ローカリゼーション背景画像
- 13. Android:背景画像
- 14. 背景画像AndroidStudio
- 15. ブートストラップジャンボトロン背景画像
- 16. フェード背景画像
- 17. Gtk#背景画像
- 18. 背景画像 - エッジ
- 19. 背景画像 - フルスケール
- 20. 背景画像リサイズエラー
- 21. 背景画像フルスクリーン
- 22. Div背景画像
- 23. UITableViewController背景画像
- 24. fabric.js:背景画像
- 25. CSS - 背景画像
- 26. スタイルローカル背景画像
- 27. スワイパースライダーレスポンス背景画像
- 28. ダブル背景画像
- 29. div背景画像
- 30. UITextView背景画像
ボタンのサイズ変更は、テキストの幅に応じてどのように行われますか?また、背景を伸縮可能な画像としてどのように設定しますか?ありがとう。 –
'NSString'の' -sizeWithFont: 'メソッドを使います:http://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html。バックグラウンドは 'UIButton'の' -setBackgroundImage:forState: 'で設定されます。 –
@ibeitia、コードを更新しました。 –