2016-10-14 2 views
2

J'ai une application storyboard NSDocuments & créée avec l'assistant dans Xcode 8. Dans la scène ViewController j'ai ajouté un NSTextView. Certains éléments de menu sont désactivés, tels que Gras et Italique.Peut souligner, mais pas de texte en gras dans NSTextView

En regardant le premier répondant, les actions pour le gras et l'italique ne sont pas présentes. Suis-je censé écrire ces méthodes moi-même? Est-ce dû au fait que la chaîne du répondeur n'est pas correctement configurée? Pourquoi le soulignement apparaît-il mais pas en gras? Éditer: Ajouter une image pour montrer comment je peux éditer le texte avec la barre d'inspecteur, mais le menu de format ne montre pas les commandes que je m'attendrais.

Image showing how I can modify text with the Inspector Bar, but not with the menu, apart from Underlining

+0

Désolé, que voulez-vous dire par "certains éléments de menu sont désactivés"? Où sont ces éléments de menu? – rocky

+0

Dans le menu principal de l'application, celui qui est créé avec l'assistant. Les entrées sont sous Format/Police. – Henrik

+0

En regardant l'API NSText, il semble qu'il y ait une méthode pour souligner, alors que j'imagine que le texte en gras et en italique nécessiterait de changer la famille de polices. Peut-être que c'est ça. – Henrik

Répondre

6

Il y a une raison historique (?) De ce problème. Lorsque le menu principal était créé dans un fichier xib, le fichier xib contenait automatiquement une instance de NSFontManager et des éléments de menu tels que Bold y étaient connectés. Toutefois, dans un storyboard moderne, il n'existe aucune instance NSFontManager prédéfinie. Alors, vous pouvez les connecter manuellement à un FontManager en suivant les étapes suivantes.

  1. Créez une instance Object normale (cube bleu) dans la scène Application.
  2. Modifiez la classe de l'instance Object en NSFontManager. enter image description here
  3. Connectez les éléments de menu à l'action addFontTrait(_:) du fontManager. De même, connectez les articles "Bigger" et "Smaller" au modifyFont(_:). enter image description here

Vous devez également définir l'étiquette de menuItems, mais ils sont en réalité déjà définis. Définissez également la balise correspondante manuellement uniquement si la balise de menuItem est 0.

+0

Excellente explication, même avec des images. Merci beaucoup. – Henrik

+0

Oh, trouvé ici https://developer.apple.com/library/content/documentation/TextFonts/Conceptual/CocoaTextArchitecture/FontHandling/FontHandling.html#//apple_ref/doc/uid/TP40009459-CH5-SW17 et ici https : //developer.apple.com/library/content/documentation/TextFonts/Conceptual/CocoaTextArchitecture/FontHandling/FontHandling.html#//apple_ref/doc/uid/TP40009459-CH5-SW11 –

0

Si vous faites glisser le pointeur de l'élément de menu vers le premier répondeur, dans la vue de menu, vous obtenez les mêmes options, cliquez simplement sur Ctrl. Ensuite, vous implémentez la fonction que vous venez de connecter. Si vous vous connectez Fichier> Nouveau à NewDocument et mettre en œuvre dans votre ViewController

func newDocument(_ sender: Any?){ 
    print("func newDocument(_ sender: Any? \(String(describing: sender)))") 
} 

Il sera appelé. Le premier répondeur répertorie toutes les mêmes méthodes que l'objet ajouté avec NSFontManager en tant que classe. Je n'utilise pas @IBAction devant la méthode car je ne la connecte pas.