WebView
через WebEditingDelegate
поддерживает механизм, позволяющий делегату реализовать пользовательское поведение для различных действий, которые получает WebView
(или частное WebHTMLView
).Когда в WebHTMLView
получено действие, такое как:
-(void)changeAttributes:(id)sender
, оно передается методу делегата:
-(BOOL)webView:(WebView *)webView doCommandBySelector:(SEL)command
К сожалению, механизм не обеспечивает передачу«sender
» в исходном методе действия.
Для подавляющего большинства действий отправитель не важен, но для changeAttributes и changeFont, например, контракт требует, чтобы «sender
» быловызывается получателем, например, для convertAttributes:
или convertFont:
.
. Для случая changeFont
оказывается, что достаточно вызвать [[NSFontManager sharedFontManager] convertFont:]
, так как по совпадению это и есть отправитель.
В случае changeAttributes
, в частности при изменении перечеркивания, отправителем может быть закрытый класс "NSFontEffectsBox
", который предположительно соответствует подразделу панели шрифтов, отвечающему за изменение настроек перечеркивания / и т. Д..
К сожалению, вызов [[NSFontManager sharedFontManager] convertAttributes:]
НЕ приводит к ожидаемым изменениям атрибута.Это оставляет делегата, который заинтересован в осмысленной реализации этого метода, немного загадкой:
WebKit не передает отправителю, поэтому делегат не может заключить договор [sender convertAttributes:]
call.
Вызов changeAttributes:
отправляется в закрытый класс WebKit WebHTMLView
, который нельзя разделить на подклассы, например, для настройки поведения changeAttributes:
.
Отправитель для changeAttributes:
вызова, NSFontEffectsBox
, является частным классом и недоступен, например, как [NSFontEffectsBox sharedFontEffectsBox]
.
КорочеПохоже, что у разработчика нет возможности существенно изменить поведение changeAttributes:
для WebView
.
Есть идеи?