2016-10-14 2 views
2

У меня есть NSDocuments & приложение раскадровки, созданное с помощью мастера в Xcode 8. В Сцене ViewController я добавил NSTextView. Некоторые пункты меню отключены, например, полужирный и курсив.Может подчеркнуть, но не полужирный текст в NSTextView

Глядя на первого ответчика, действия для выделенных жирным шрифтом и курсивом отсутствуют. Должен ли я сам писать эти методы? Это связано с неправильной настройкой цепи ответчика? Почему подчеркивание появляется, но не смело?

Редактирование: добавление изображения, чтобы показать, как я могу редактировать текст с помощью панели Inspector, но в меню «Формат» не отображаются команды, которые я ожидал бы.

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

+0

Извините, что вы подразумеваете под «некоторыми пунктами меню отключены»? Где находятся эти пункты меню? – rocky

+0

В главном меню приложения, которое создано с помощью мастера. Записи находятся в разделе «Формат/Шрифт». – Henrik

+0

Глядя на API NSText, кажется, что есть метод подчеркивания, тогда как я думаю, что для смещения и курсивом текста потребуется изменить семейство шрифтов. Возможно, именно так. – Henrik

ответ

6

Существует исторический (?) Причина этой проблемы. Когда основное меню было создано в файле xib, файл xib автоматически содержал экземпляр NSFontManager, и к нему были подключены такие пункты меню, как Bold. Однако в современной раскадровке нет предустановленного экземпляра NSFontManager.

Ну, тогда вы можете подключить их к FontManager вручную, выполнив следующие шаги.

  1. Создайте обычный экземпляр объекта (синий куб) на сцене приложения.
  2. Измените класс экземпляра объекта на NSFontManager. enter image description here
  3. Подключить элементы меню к addFontTrait(_:) действию шрифтаManager. Аналогичным образом подключите «Bigger» и «Smaller» к modifyFont(_:). enter image description here

Вы также должны установить тег MenuItems', однако на самом деле они уже установлены. Установите соответствующий тег также вручную, только если тег menuItem равен 0.

+0

Отличное объяснение, даже с картинками. Большое спасибо. – Henrik

+0

О, нашел это здесь https://developer.apple.com/library/content/documentation/TextFonts/Conceptual/CocoaTextArchitecture/FontHandling/FontHandling.html#//apple_ref/doc/uid/TP40009459-CH5-SW17 и здесь https : //developer.apple.com/library/content/documentation/TextFonts/Conceptual/CocoaTextArchitecture/FontHandling/FontHandling.html#//apple_ref/doc/uid/TP40009459-CH5-SW11 –

0

Если вы перетаскиваете ctrl из пункта меню в первый ответчик, в режиме меню вы получаете одинаковые параметры, просто нажмите ctrl. Затем вы выполняете любую функцию, которую вы только что подключили. Если вы подключаете Файл> Создать, чтобы NewDocument и реализовать в вашем ViewController

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

Он будет вызван. Первый ответчик перечисляет все те же методы, что и добавленный объект с классом NSFontManager. Я не использую @IBAction перед методом, потому что я его не подключаю.

Смежные вопросы