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

Как отключить / включить определенный элемент UITabBar,

Core-Data executeFetchRequest задерживает приложение в фоновом потоке

Нет действительных ключей подписи кода iOS, найденных в keychain

Могу ли я, чтобы несколько разработчиков тестировали мое приложение iPhone / iPad, если я создаю индивидуальную учетную запись, а не учетную запись компании?

Анимация анимации UIView.animateWithDuration

Плиты MKMapView не загружены с увеличением

Как я могу нарисовать повернутый UIView с тенью, но без поворота тени

Swift не генерирует предупреждение неиспользуемой переменной

Анимация ячейки UICollectionView при выборе

iOS 8. window.location.href не работает с URL-схемой

Бета-тестирование и покупка в приложении

iOS Stream Audio с сервера с поддержкой Cookie

Добавление нескольких веб-страниц в UIWebview в приложении на основе страниц

Обновление объекта модели Core-Data и подкласса NSManagedobject

Как установить фоновое изображение для SKScene?

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