UITextView – Вставить действие вставляет пустую строку на iOS 11

У меня есть регулярный UITextView , который поддерживает Paste из коробки через UIKit . Ничего необычного в textView. До тех пор, пока iOS 10, включая, вставку, работало, как ожидалось.

Начиная с iOS 11, когда я UIMenuController текст в него с UIMenuController действия UIMenuController , текст не является пастером ( UIMenuController исчезает после нажатия на вставку).

Отладка UITextViewDelegate :

- (BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text ,

показывает, что пустая строка будет вставлена, хотя PasteBoard имеет непустое значение, но я не могу понять, почему.

Однако при копировании URL-адреса из адресной строки Safari действие пасты работает.

Я знаю, что Apple внесла изменения в функциональность Paste в iOS 11, однако, согласно документам Apple Cut-Copy-Paste Apple , функциональность UITextView должна оставаться прежней.

В iOS 11 также был введен UITextPasteDelegate . Мне удалось взломать исправление для действия Paste, используя это, но это не похоже на способ :

объявите реализацию UITextPasteDelegate и выполните следующие действия в классе / контроллере, где содержится ваш UITextView:

 //declare yourself as a paste delegate - (void)viewDidLoad { [super viewDidLoad]; self.textView.pasteDelegate = self; } //Set a Hook to know there's a paste action while I'm the first responder - fired when Paste was tapped - (void)textPasteConfigurationSupporting:(id<UITextPasteConfigurationSupporting>)textPasteConfigurationSupporting transformPasteItem:(id<UITextPasteItem>)item API_AVAILABLE(ios(11.0)) { [self paste:textPasteConfigurationSupporting]; } //generic paste action handler - (void)paste:(id)sender { UIPasteboard *gpBoard = [UIPasteboard generalPasteboard]; if ([gpBoard hasStrings]) { id<UITextPasteConfigurationSupporting> pasteItem = (id<UITextPasteConfigurationSupporting>)sender; if ([pasteItem isKindOfClass:[UITextView class]]) { UITextView* myTextView = (UITextView*)pasteItem; [myTextView insertText:[gpBoard string]]; } } } 

Кстати, то же самое касается вставки текста в UISearchBar .

Мой проект использует iOS 9.0 в качестве цели развертывания. Я не обманывал себя цепями первого ответчика или не испортил их.

Если я открою новый проект и использую те же функциональные возможности UITextView, вставьте работы, как ожидалось, без хакерского исправления.

Interesting Posts

Проверка подписи с транзакции iOSReceipt

создать объект CLLocation в объекте-c

Как удалить приложение Сборка на новом сайте iTunes Connect?

iOS скрыть клавиатуру по умолчанию и открыть пользовательскую клавиатуру

UICollectionView – репликация функций Photos.app

Есть ли способ получить чистый ответ JSON с AFNetworking Obj-C?

Как использовать NSFetchedResultsController и UISearchController вместе?

Загрузка файла с URL-адреса и сохранение ресурсов на iPhone

Как добавить метку доступности к минус-изображению, которое добавляется в ячейку tableview?

неудачная установка приложения

Как скрыть сообщение строки состояния, когда приложение использует службы определения местоположения в iOS

Диалоговое окно «Разрешение текущего местоположения» отображается в приложении «Phonegap» дважды

Мое приложение iphone было отклонено по этой причине: «Мы обнаружили, что ваше приложение не соответствует рекомендациям по хранению данных iOS …»

Рамка uitableview не изменяется программно

UILabel анимации неправильно

PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.