こんにちは、iPhone の開発は初めてです。右側の UIBarbutton アイテムにバッジ値を追加するのに苦労しています。試しましたが、この問題を解決できません。誰でも私を助けることができますか?
前もって感謝します!
こんにちは、iPhone の開発は初めてです。右側の UIBarbutton アイテムにバッジ値を追加するのに苦労しています。試しましたが、この問題を解決できません。誰でも私を助けることができますか?
前もって感謝します!
この投稿がかなり古いことは承知していますが、iOS7 では、MKNumberBadgeView の外観がタブ バー アイテムのバッジ デザインと実際には一致しません。UIBarButtonItem を継承し、非常にうまく機能するこの他のコンポーネントを見つけました。
https://github.com/TanguyAladenise/BBBadgeBarButtonItem
これが私のような他のiOS7開発者に役立つことを願っています
最後に、UIBarbutton アイテムにバッジを追加する方法を見つけました。私はたくさん検索しましたが、正しい答えが見つかりませんでした。そこで、UIButton を作成し、rightbarbutton アイテムのカスタム ビューとして追加しました。バッジ番号を表示するためのMKNumberBadgeViewを追加します。以下に私のコードを追加します。
// Initialize NKNumberBadgeView...
MKNumberBadgeView *number = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(60, 00, 30,20)];
number.value = 10;
// Allocate UIButton
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 70, 30);
btn.layer.cornerRadius = 8;
[btn setTitle:@"Button" forState:UIControlStateNormal];
[btn addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside];
//[btn setBackgroundColor:[UIColor blueColor]];
[btn setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.1 alpha:0.2]];
btn.font = [UIFont systemFontOfSize:13];
//[btn setFont:[UIFont systemFontOfSize:13]];
[btn addSubview:number]; //Add NKNumberBadgeView as a subview on UIButton
// Initialize UIBarbuttonitem...
UIBarButtonItem *proe = [[UIBarButtonItem alloc] initWithCustomView:btn];
self.navigationItem.leftBarButtonItem = proe;
ありがとう。
phyzalis には良い答えがあります。彼のソリューションの分類されたバージョンがここにあります。
使用方法は次のとおりです。
// Build your regular UIBarButtonItem with Custom View
UIImage *image = [UIImage imageNamed:@"someImage"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0,0,image.size.width, image.size.height);
[button addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchDown];
[button setBackgroundImage:image forState:UIControlStateNormal];
// Make BarButton Item
UIBarButtonItem *navLeftButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = navLeftButton;
// this is the key entry to change the badgeValue
self.navigationItem.leftBarButtonItem.badgeValue = @"1";
MaxMaと似たようなことをしましたが、先に進んでバッジをself.navigationController.navigationBarに直接追加しました。
MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(35, 0, 40, 40)];
numberBadge.value = 1;
[self.navigationController.navigationBar addSubview:numberBadge];
viewWillDisappear中にサブビューから削除し、viewDidAppear中に再度追加してください。まだ少しハッキーなようですが、ナビゲーションバーのzオーダーを変更するよりも、このハックの方が快適です。
viewWillDisappear中に削除するには
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[numberBadge removeFromSuperview];
}
シンプルで最良の方法です!
MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(230, -51, 40, 40)];
numberBadge.value = 5;
self.navigationController.navigationBar.layer.zPosition = -1;
[self.view addSubview:numberBadge];
これはすでに解決されていることは知っていますが、完全を期すために、発見したことをこの回答に追加すると思いました。
MKNumberBadgeView
のビューに直接追加することもできますUIBarButtonItem
。Monotouch (C#) を使用して、次のようにビューを取得します。UIBarButtonItem
//barbutton is some UIBarButtonItem. Make sure to check for view. In
//ViewDidLoad(), the view for the barbutton might not exist yet.
Selector sel = new Selector("view");
var handle = Messaging.intptr_objc_msgSend(barbutton.Handle, sel.Handle);
var view = Runtime.GetNSObject(handle) as UIView;
var mkBadge = ... //the badge
view.Add(badge);
view.Layer.ZPosition = <some large number>
これを Obj-C に変換するのは簡単だと思います。また、バッジが適切な場所に表示されるようにするには、フレームをいじる必要があります。
これにより、ナビゲーションバーからビューを削除/追加する必要がなくなります。