Расширения действий - как узнать, когда изменение приложения хоста поддерживается? - PullRequest
1 голос
/ 21 марта 2019

Я следую учебному пособию, чтобы создать простое расширение для текста. Расширение действия запускается как модальное наложение с помощью кнопки «Поделиться…» в системном контекстном меню выбора текста (или с помощью кнопки «Действие» в приложениях, которые обрабатывают простой текст и поддерживают его).

Изменения выполняются на дескрипторе модального наложения в целевом приложении, и в конце редактирования вы отправляете отредактированный контент в хост-приложение (если хотите), и текст заменяется отредактированным контентом. , Если вы отправите его в размещенное приложение, которое не поддерживает изменение на месте, действие не будет иметь эффекта. У меня вопрос: как узнать, когда хост-приложение поддерживает модификацию на месте?

Вот код, который я использую (полученный из этого онлайн-учебника ).

Получить предметы из расширения:

 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

...