33 Stimmen

Wie kann man Abzeichen zu UIBarbutton-Elementen hinzufügen?

Hallo Freunde, ich bin neu in der iphone Entwicklung. Am Kampf mit Abzeichen Werte auf UIBarbutton Element auf der rechten Seite hinzufügen. Ich habe versucht, aber ich kann dieses Problem nicht lösen. Kann mir jemand helfen.

Vielen Dank im Voraus!

5voto

Kiran Jadhav Punkte 3029

Aktualisiert für Swift 3:

Verwenden Sie den folgenden einfachen Code, um das Abzeichen auf UIBarButtonItem hinzuzufügen;

// 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()

//Sie müssen Ihren Code so schreiben, wie Sie Ihre Logik entschieden haben, d.h. wie Sie die Anzahl der Abzeichen in der Datenbank aufrechterhalten.

Viel Spaß!

0voto

ceiling cat Punkte 426

Ich weiß, dass dieses Problem bereits gelöst wurde, aber ich dachte, ich könnte dieser Antwort der Vollständigkeit halber hinzufügen, was ich entdeckt habe.

Sie können auch einfach hinzufügen MKNumberBadgeView direkt zur Ansicht für die UIBarButtonItem . Mit Monotouch (C#) erhalten Sie so die Ansicht für die 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> 

Ich bin sicher, dass es einfach ist, dies in Obj-C zu konvertieren. Sie müssen auch mit dem Rahmen für das Abzeichen herumspielen, damit es an der richtigen Stelle angezeigt wird.

Auf diese Weise müssen Sie die Ansicht nicht aus der Navigationsleiste entfernen/hinzufügen.

0voto

Nach der Suche nach zu vielen Lösungen habe ich diese beste Lösung für Objective-C gefunden

Gehen Sie auf folgenden Link und laden Sie zwei Dateien herunter "UIBarButtonItem+Badge.h" y "UIBarButtonItem+Badge.m" und zu Ihrem Projekt hinzufügen:

https://github.com/mikeMTOL/UIBarButtonItem-Badge

Dann importieren Sie in Ihrer Klasse :

#import "UIBarButtonItem+Badge.h"

Und schreiben Sie die folgende Zeile, um das Abzeichen hinzuzufügen:

self.navigationItem.rightBarButtonItem.badgeValue = @"1"; //your value 

Hoffentlich klappt es!!!

0voto

Allan Punkte 178

Erweiterung zum Hinzufügen einer UIActivityIndicatorView ohne Ersetzen des UIBarButtonItem.

Erweiterung 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
}

}

0voto

Syngmaster Punkte 395

Hier ist eine einfache Swift 4-Lösung für diese Aufgabe (mit einigen Anpassungen) https://github.com/Syngmaster/BadgedBarButtonItem

Ziehen Sie die Klasse einfach per Drag & Drop in Ihr Projekt und Sie können sie so verwenden:

class ViewController: UIViewController {

    let btn = BadgedButtonItem(with: UIImage(named: "your_image"))

    override func viewDidLoad() {
        super.viewDidLoad()

        btn.badgeTextColor = .black
        btn.badgeTintColor = .yellow
        btn.position = .right
        btn.hasBorder = true
        btn.borderColor = .red
        btn.badgeSize = .medium
        btn.badgeAnimation = true

        self.navigationItem.rightBarButtonItem = btn

        btn.tapAction = {
            self.btn.setBadge(with: 4)
        }

    }

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X