web-dev-qa-db-fra.com

Définir l'image et le titre de l'élément de bouton de barre?

J'ai actuellement un contrôleur de navigation personnalisé avec des éléments de bouton de barre qui sont simplement des boutons de texte. Est-il possible de conserver le titre des éléments du bouton de la barre mais également de les définir comme des images (image d'icône + titre en dessous).

class NavigationController: UINavigationController
{
    var mode: NavigationMode = .Swipe {
        didSet {
            self.setButtonAttributes()
        }
    }

    private var leftBarButton: UIBarButtonItem!
    private var middleBarButton: UIBarButtonItem!
    private var rightBarButton: UIBarButtonItem!
    private var rightBarButton2: UIBarButtonItem!

    override func viewDidLoad()
    {
        super.viewDidLoad()
    }

    func configureNavigationItem(navigationItem: UINavigationItem)
    {
        //Configure the bar buttons text and actions


        if (self.leftBarButton == nil) {
            self.leftBarButton = UIBarButtonItem(title: "Menu1", style: .Plain,target: self, action: "menu1Pressed:")
        }
        if (self.middleBarButton == nil) {
            self.middleBarButton = UIBarButtonItem(title: "Games", style: .Plain, target: self, action: "gamesPressed:")
        }
        if (self.rightBarButton == nil) {
            self.rightBarButton = UIBarButtonItem(title: "Menu3", style: .Plain, target: self, action: "menu3Pressed:")
        }
        if (self.rightBarButton2 == nil) {
            self.rightBarButton2 = UIBarButtonItem(title: "Settings", style: .Plain, target: self, action: "settingsPressed:")
        }

        self.setButtonAttributes()

        navigationItem.leftBarButtonItems = [self.leftBarButton, self.middleBarButton, self.rightBarButton, self.rightBarButton2]

    }

Mis à jour:

  let button = UIButton(type: .System)
        button.setImage(UIImage(named: "play"), forState: .Normal)
        button.setTitle("Play", forState: .Normal)
        button.sizeToFit()

        leftBarButton = UIBarButtonItem(customView: button)

        if (self.leftBarButton == nil) {
            self.leftBarButton = UIBarButtonItem(title: "Play", style: .Plain,target: self, action: "Pressed:")
        }
20
winston

Vous pouvez créer une instance UIButton, définir une image et un titre pour celle-ci, puis créer votre UIBarButtonItem avec:

    let button = UIButton(type: .System)
    button.setImage(UIImage(named: "YourImage"), forState: .Normal)
    button.setTitle("YourTitle", forState: .Normal)
    button.sizeToFit()
    self.leftBarButton = UIBarButtonItem(customView: button)

Pour ajouter une action:

    button.addTarget(self, action: #selector(self.someAction), forControlEvents: .TouchUpInside)

où self.someAction est

func someAction() {

}
40
Olga Nesterenko

Créez un UIButton, définissez une image et un titre pour celui-ci et utilisez-le comme une image personnalisée pour initier votre UIBarButtonItem(customView:) avec.

Si vous voulez que l'image soit sur le côté droit du bouton, vous pouvez définir semanticContentAttribute du bouton sur .forceRightToLeft.

Exemple de Swift 4:

let view = UIView()
let button = UIButton(type: .system)
button.semanticContentAttribute = .forceRightToLeft
button.setImage(UIImage(named: "DocumentsIcon"), for: .normal)
button.setTitle("Documents", for: .normal)
button.addTarget(self, action: #selector(openDocuments), for: .touchUpInside)
button.sizeToFit()
view.addSubview(button)
view.frame = button.bounds
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: view)
10
alxhbly

Swift 3:

    let button = UIButton(type: .system)
    button.setImage(UIImage(named: "categories_icon"), for: .normal)
    button.setTitle("Categories", for: .normal)
    button.addTarget(self, action: #selector(showCategories), for: .touchUpInside)
    button.sizeToFit()
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: button)
9
Dvole