2017-01-30 1 views
0

J'ai rencontré un problème de route en essayant de changer le bouton de la barre d'outils de type UIBarButtonItem pendant l'exécution.Modifier le bouton de la barre d'outils

J'ai créé par programme une barre d'outils pour une vue de texte donnée et je veux changer l'image du bouton quand il est pressé, comme s'il avait une bascule sur l'image et une autre.

Je vais vous expliquer:

Ici, je crée la barre d'outils avec les boutons de votre choix

func configureToolbar(forTextView textView: UITextView) { 

    toolbar?.barStyle = UIBarStyle.default 
    toolbar?.items = [ 
     UIBarButtonItem.init(image: UIImage.init(named: "bold_unselected"), style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:))), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), 
     UIBarButtonItem(title: "Italic", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapItalic(sender:))), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), 
     UIBarButtonItem(title: "Underline", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.dismissKB))] 
    toolbar?.sizeToFit() 

    for (index,item) in (toolbar?.items?.enumerated())! { 
     item.tag = index 
    } 

    // Adds a view as a upper border line 
    let border = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 0.5)) 
    border.backgroundColor = UIColor.lightGray 
    toolbar?.addSubview(border) 

    // Configures the toolbar 
    toolbar?.backgroundColor = UIColor.white 
    toolbar?.barTintColor = UIColor.white 
    toolbar?.tintColor = UIColor.black 
    toolbar?.clipsToBounds = true 

    // Adds to the super view; 
    textView.inputAccessoryView = toolbar 
} 

Voici la fonction du bouton gras

func didTapBold(sender: UIBarButtonItem) { 

    typeface.isBold = typeface.isBold! ? false : true // true -> false -> true 
    toggleButton(button: sender, status: typeface.isBold!) 
} 

est là où je veux pour changer le bouton 'status' ON - OFF

func toggleButton(button: UIBarButtonItem, status: Bool) { 
    // changes the button appearance 
    switch button.tag { 
    case 0: 
     print("bold") 
     print("status \(status)") 
     if status { 
      button.image = UIImage.init(named: "bold_selected") 
     } else { 
      button.image = UIImage.init(named: "bold_unselected") 
     } 

    case 2: 
     print("bla bla bla") 

    case 4: 
     print("bla bla bla 2") 

    default: 
     print("default value called") 
    } 
} 

Pour une raison quelconque, je ne peux pas changer l'image de celui que je veux, mais je peux changer les uns aux autres. J'ai lu les lignes directrices de l'interface utilisateur et je ne trouve pas la taille d'image recommandée pour la barre d'outils, mais après avoir lu dans certains sites Web 20x20, quelqu'un peut-il confirmer?

Il y a l'image par défaut et celle sélectionnée.

unselected

selected

MISE A JOUR D'une certaine manière, il semble que je ne peux pas ajouter une icône de couleur/image à la barre d'outils. Juste essayé d'ajouter une icône différente et il s'est juste présenté comme un point noir.

+0

BTW, mes images/icônes sont 64x64 Je ne sais pas si cela cause le problème, je ne le pense vraiment pas –

+0

Quelqu'un aide-t-il? :) –

Répondre

0

J'ai donc trouvé la solution, ce qui est assez simple mais pas facile à trouver.

Si vous souhaitez ajouter des icônes/images de couleur à votre barre d'outils, n'oubliez pas, lorsque vous ajoutez l'image, de définir la propriété du mode de rendu sur Toujours d'origine.

Se corriger le code devrait maintenant être:

//when setting the toolbar icons 
toolbar?.items = [UIBarButtonItem.init(image: UIImage.init(named: "bold_unselected")?.withRenderingMode(.alwaysOriginal), style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:)))] 

Ou instancier vos images pour

let img = UIImage(named: "image").withRenderingMode(.alwaysOriginal) 
let barBtnItm = UIBarButtonItem.init(image: img, style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.didTapBold(sender:))) 

it helps