Я следую учебному пособию, чтобы создать простое расширение для текста. Расширение действия запускается как модальное наложение с помощью кнопки «Поделиться…» в системном контекстном меню выбора текста (или с помощью кнопки «Действие» в приложениях, которые обрабатывают простой текст и поддерживают его).
Изменения выполняются на дескрипторе модального наложения в целевом приложении, и в конце редактирования вы отправляете отредактированный контент в хост-приложение (если хотите), и текст заменяется отредактированным контентом. , Если вы отправите его в размещенное приложение, которое не поддерживает изменение на месте, действие не будет иметь эффекта. У меня вопрос: как узнать, когда хост-приложение поддерживает модификацию на месте?
Вот код, который я использую (полученный из этого онлайн-учебника ).
Получить предметы из расширения:
let textItem = self.extensionContext!.inputItems[0]
as! NSExtensionItem
let textItemProvider = textItem.attachments![0] // the extension supports text based content so the kUTTypeText UTI is used to perform this test
if textItemProvider.hasItemConformingToTypeIdentifier(kUTTypeText as String) {
textItemProvider.loadItem(forTypeIdentifier: // if the host app has data of the required type, it can be loaded into the extension
kUTTypeText as String,
options: nil,
completionHandler: { (result, error) in
self.receivedText = result as? String // string containing the text loaded from the host app
if self.receivedText != nil {
DispatchQueue.main.async {
self.processedText = self.receivedText!
}
}
})
}
Возврат отредактированного содержимого в хост-приложение:
func returnEditedContent() {
let returnProvider =
NSItemProvider(item: processedText as NSSecureCoding?,
typeIdentifier: kUTTypeText as String) // create a new NSItemProvider instance
let returnItem = NSExtensionItem() // a new NSExtensionItem instance is created
returnItem.attachments = [returnProvider]
self.extensionContext!.completeRequest(returningItems: [returnItem], completionHandler: nil)
}
Кнопка отмены:
@IBAction func cancelButtonPressed(_ sender: Any) {
self.extensionContext!.cancelRequest(withError: DismissExtension.cancelByUser)
}
Я искал решение на разных ресурсах, не найдя его. Вот некоторые документы:
Apple - Понимание расширений действий , Руководство по интерфейсу пользователя Apple - общий доступ и действия , Средний - Простое расширение для действий с текстом Swift 3