33

こんにちは、iPhone の開発は初めてです。右側の UIBarbutton アイテムにバッジ値を追加するのに苦労しています。試しましたが、この問題を解決できません。誰でも私を助けることができますか?

前もって感謝します!

4

10 に答える 10

30

この投稿がかなり古いことは承知していますが、iOS7 では、MKNumberBadgeView の外観がタブ バー アイテムのバッジ デザインと実際には一致しません。UIBarButtonItem を継承し、非常にうまく機能するこの他のコンポーネントを見つけました。

https://github.com/TanguyAladenise/BBBadgeBarButtonItem

これが私のような他のiOS7開発者に役立つことを願っています

于 2014-03-12T05:38:27.540 に答える
29

最後に、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;

ありがとう。

于 2011-04-19T04:08:21.093 に答える
21

phyzalis には良い答えがあります。彼のソリューションの分類されたバージョンがここにあります。

UIBarButtonItem+バッジ

使用方法は次のとおりです。

// 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";
于 2014-05-07T14:53:02.707 に答える
12

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]; 
}
于 2012-11-26T02:58:32.040 に答える
7

シンプルで最良の方法です!

ここに画像の説明を入力してください

MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(230, -51, 40, 40)];
numberBadge.value = 5;

self.navigationController.navigationBar.layer.zPosition = -1;
[self.view addSubview:numberBadge];
于 2012-11-19T07:16:36.580 に答える
0

これはすでに解決されていることは知っていますが、完全を期すために、発見したことをこの回答に追加すると思いました。

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 に変換するのは簡単だと思います。また、バッジが適切な場所に表示されるようにするには、フレームをいじる必要があります。

これにより、ナビゲーションバーからビューを削除/追加する必要がなくなります。

于 2013-08-12T18:36:41.413 に答える