Jak dodać odznaki na przedmiot UIBarbutton?
Cześć przyjaciele jestem nowy w rozwoju iphone. Mam problem z dodaniem wartości znaczków na elemencie UIBarbutton po prawej stronie. Próbowałem, ale nie mogę rozwiązać tego problemu. Czy ktoś może mi pomóc?
Z góry dzięki!
9 answers
Wiem, że ten post jest dość stary, ale z iOS7 wygląd MKNumberBadgeView nie pasuje do projektu znaczka elementu paska kart. Znalazłem ten drugi komponent, który dziedziczy UIBarButtonItem i wykonuje pracę bardzo dobrze:
Https://github.com/TanguyAladenise/BBBadgeBarButtonItem
Mam nadzieję, że to może pomóc innym programistom iOS7, takim jak ja
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 05:38:27
W końcu znalazłem sposób, aby dodać odznaki na przedmiot UIBarbutton. Szukałem dużo, ale nie znalazłem prawidłowej odpowiedzi. Więc utworzyłem UIButton i dodałem go jako niestandardowy widok na pozycji rightbarbutton. Dodaj dodaj MKNumberBadgeView, aby wyświetlić numer odznaki. Poniżej mam dodać mój kod dla Ciebie.
// 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;
Dzięki.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 13:02:11
Phyzalis ma dobrą odpowiedź, jest tu skategoryzowana Wersja jego rozwiązania:
Oto jak możesz go użyć:
// 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";
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-07 14:53:02
Zrobiłem coś podobnego do Maxmy, ale po prostu poszedłem naprzód i dodałem odznakę bezpośrednio do jaźni.navigationController.pasek nawigacyjny.
MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(35, 0, 40, 40)];
numberBadge.value = 1;
[self.navigationController.navigationBar addSubview:numberBadge];
Po prostu upewnij się, aby usunąć go z podview podczas viewWillDisappear i dodać go z powrotem podczas viewDidAppear. To nadal wydaje się trochę trudne, ale jestem bardziej komfortowe z tym włamaniem niż zmiana paska nawigacyjnego z-order.
Aby usunąć go podczas viewWillDisappear
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[numberBadge removeFromSuperview];
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-07 15:38:26
To prosty i najlepszy sposób !
MKNumberBadgeView *numberBadge = [[MKNumberBadgeView alloc] initWithFrame:CGRectMake(230, -51, 40, 40)];
numberBadge.value = 5;
self.navigationController.navigationBar.layer.zPosition = -1;
[self.view addSubview:numberBadge];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-19 07:34:34
Zaktualizowano dla Swift 3:
Użyj poniższego prostego kodu, aby dodać plakietkę na UIBarButtonItem;
// Variable Declartion
var badgeCount = Int()
// Instance Method
func setUpBadgeCountAndBarButton() {
// badge label
let label = UILabel(frame: CGRect(x: 10, y: -05, width: 25, height: 25))
label.layer.borderColor = UIColor.clear.cgColor
label.layer.borderWidth = 2
label.layer.cornerRadius = label.bounds.size.height / 2
label.textAlignment = .center
label.layer.masksToBounds = true
label.textColor = .white
label.font = label.font.withSize(12)
label.backgroundColor = .red
label.text = "\(self.badgeCount)"
// button
let rightButton = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35))
rightButton.setBackgroundImage(UIImage(named: "notification_dash"), for: .normal)
rightButton.addTarget(self, action: #selector(notificationBarButtonClick), for: .touchUpInside)
rightButton.addSubview(label)
// Bar button item
let rightBarButtomItem = UIBarButtonItem(customView: rightButton)
navigationItem.rightBarButtonItem = rightBarButtomItem
}
// Call To Method
self.badgeCount = 11
self.setUpBadgeCountAndBarButton()
//Uwaga: Zwiększ swoją odznakę zgodnie z otrzymanym powiadomieniem.Musisz napisać swój kod zgodnie z Twoją logiką, czyli jak utrzymać numer odznaki w bazie danych.
Smacznego..!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 07:05:52
Wiem, że to już zostało rozwiązane, ale pomyślałem, że mogę dodać to, co odkryłem do tej odpowiedzi ze względu na kompletność.
Możesz również po prostu dodać MKNumberBadgeView
bezpośrednio do widoku UIBarButtonItem
. Używając MonoTouch (C#), w ten sposób otrzymujesz widok dla 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>
Jestem pewien, że łatwo jest przekonwertować to na Obj-C. będziesz również musiał pobawić się ramką, aby odznaka pojawiła się we właściwym miejscu.
W ten sposób nie będziesz musiał usuwać/dodawać widok z paska nawigacyjnego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-12 18:36:41
Po przeszukaniu zbyt wielu rozwiązań znalazłem to najlepsze rozwiązanie dla Objective-C
Przejdź do linku i pobierz dwa pliki "UIBarButtonItem+Badge.h " i " UIBarButtonItem+Odznaka.m " i dodaj do swojego projektu:
Https://github.com/mikeMTOL/UIBarButtonItem-Badge
Następnie zaimportuj do swojej klasy:
#import "UIBarButtonItem+Badge.h"
I zapisz następujący wiersz, aby dodać znaczek:
self.navigationItem.rightBarButtonItem.badgeValue = @"1"; //your value
Mam nadzieję, że się uda !!!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-13 07:06:54
Rozszerzenie do dodawania interfejsu Użytkownika bez zastępowania interfejsu użytkownika.
Extension UIBarButtonItem {
func startLoading() {
guard let view = self.value(forKey: "view") as? UIView else { return }
let loading = UIActivityIndicatorView(activityIndicatorStyle: .gray)
loading.frame = view.bounds
loading.startAnimating()
view.addSubview(loading)
view.bringSubview(toFront: loading)
let buttonView = view.subviews.first
buttonView?.alpha = 0.1
}
func stopLoading() {
guard let view = self.value(forKey: "view") as? UIView else { return }
let loading = view.subviews.filter({ $0 is UIActivityIndicatorView }).first
loading?.removeFromSuperview()
let buttonView = view.subviews.first
buttonView?.alpha = 1.0
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 21:17:28