[解決済み] UIBarButtonItemのカスタム画像とボーダーなし
2023-04-15 17:30:53
質問
UIBarButtonItemにカスタム画像を作成したいのですが、私の画像には特別なボーダーがあるため、iPhoneが追加するボーダーは必要ありません。
戻るボタンと同じで、進むボタンです。
このアプリは社内プロジェクト用なので、Appleが拒否しようが承認しようが、気に入ろうが関係ありません :-)
UIBarButtonItemのinitWithCustomView:vプロパティを使えば、できるのでは?
UIImage *image = [UIImage imageNamed:@"right.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
[button setBackgroundImage: [[UIImage imageNamed: @"right_clicked.png"] stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateHighlighted];
button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
[button addTarget:self action:@selector(AcceptData) forControlEvents:UIControlEventTouchUpInside];
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];
[v addSubview:button];
UIBarButtonItem *forward = [[UIBarButtonItem alloc] initWithCustomView:v];
self.navigationItem.rightBarButtonItem= forward;
[v release];
[image release];
これは動作しますが、もしこの処理を10ビューで繰り返さなければならないとしたら、これはDRYではありません。
サブクラス化する必要がありそうですが、どうするのでしょうか?
- NSView ?
- UIBarButtonItem ?
ありがとうございます。
よろしくお願いします。
どのように解決するのですか?
UIBarButtonItemをサブクラス化せずに、カスタムカテゴリを使用してメソッドを追加することができます。
@interface UIBarButtonItem(MyCategory)
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image target:(id)target action:(SEL)action;
@end
@implementation UIBarButtonItem(MyCategory)
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image target:(id)target action:(SEL)action{
// Move your item creation code here
}
@end
したがって、コードのどこでもこのメソッドを呼び出してバーアイテムを作成することができます(ただし、その宣言にヘッダを含めることが必要です)。
追伸:'v' UIView を使用する必要はありません。
UIBarButtonItem
を直接カスタムビューとして作成することができます。
P.P.S. あなたのコードに[forward release]も必要です。
関連
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
[解決済み] Xcodeエラー "Could not find Developer Disk Image" が発生する。
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] 「GCC使用時に「Xcode/iOSのライセンスに同意するには管理者権限が必要です。rootでsudoを使用して再実行してください。
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] Cocoapods警告 - CocoaPodsがプロジェクトの基本構成を設定しなかった理由は、プロジェクトに既にカスタム構成が設定されているためです。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
iOS classic error Undefined symbols for architecture XXX:
-
dyld: ライブラリがロードされていません。エラーの解決
-
[解決済み] 文字列の長さを取得する
-
[解決済み] Objective-CでNSNotificationCenterを通してメッセージを送受信する?
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] iOS - UITextFieldの外側をタッチするとキーボードが外れる。
-
[解決済み] iOS 13でダークモードをオプトアウトすることは可能ですか?
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] UITableView - トップにスクロールする