Функции UITextView
Копировать, Вырезать, Выбрать, Выбрать все отображаются по умолчанию, когда я нажимаю на экран. Но в моем проекте UITextField
это только для чтения. Мне эта функция не нужна. Подскажите пожалуйста, как отключить эту функцию.
ios
objective-c
uitextview
Айшвария
источник
источник
Ответы:
Самый простой способ отключить операции монтажного стола - создать подкласс,
UITextView
который переопределяетcanPerformAction:withSender:
метод, возвращаемыйNO
для действий, которые вы не хотите разрешать:Также см. UIResponder
источник
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }
- чтобы заблокировать все вариантыПодкласс UITextView и перезапись canBecomeFirstResponder:
Обратите внимание, что это применимо только к нередактируемым UITextViews! Не тестировал на редактируемых ...
источник
return NO;
по- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
методу является лучшим вариантом.Если вы хотите отключить вырезание / копирование / вставку во всем
UITextView
своем приложении, вы можете использовать категорию с:Сохраняет подкласс ... :-)
источник
UITextView
объекту вести себя должным образом, когда, например, он доступен для редактирования и получает прикосновение. Это многое, что нужно преодолетьcanPerformAction:withSender:
; вот для чего нужен протокол.Для меня это было лучшее рабочее решение:
из: https://stackoverflow.com/a/5704584/1293949
источник
Ответ @rpetrich сработал для меня. Я публикую расширенный код на случай, если он кому-то сэкономит время.
В моем случае я не хочу вообще никакого всплывающего окна, но я хочу, чтобы UITextField мог стать первым респондентом.
К сожалению, при нажатии и удерживании текстового поля появляется всплывающее окно с лупой.
Swift 4
источник
Если для прокрутки UITextView не требуется, то самое простое решение, не использующее подклассы, - просто отключить взаимодействие с пользователем для текстового представления:
источник
Самый простой способ - создать подкласс UITextView, который переопределяет canPerformAction: withSender:
источник
Когда я возвращаю NO в canPerformAction на iOS 7, я получаю много таких ошибок:
<Error>: CGContextSetFillColorWithColor: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.
Мое решение следующее:
Хитрость заключается в том, чтобы скрыть контроллер меню в следующем цикле в основной очереди (сразу после его отображения).
источник
Это самый простой способ отключить все меню выбора / копирования / вставки в UITextView.
источник
Начиная с iOS 7 в UITextView есть свойство:
Это предотвращает возможность выделения текста в представлении. У меня отлично работает.
источник
Если вы хотите заменить клавиатуру, скажем,
UIPicker
наinputView
(с, конечно, с панелью инструментовinputAccesotyView
), то этот обходной путь может помочь ...textFieldShouldBeginEditing:
textField.userInteractionEnabled = NO;
UIPickerView
, установите для него ДА.Сделав это, вы сможете нажать
UITextField
и отобразить варианты выбораUIPickerView
, в это время выUITextField
действительно не будете реагировать на какое-либо событие касания (это включает касание и удерживание для вырезания, копирования и вставки). Однако вам нужно будет не забыть установить его обратно на ДА, когда вы закрываете свой,UIPickerView
однако вы не сможете получить доступ к своемуUIPickerView
снова.Единственный момент, когда он терпит неудачу, - это когда пользователь начинает с нажатия и удерживания
UITextView
, тогда вы увидите вырезанную копию и снова вставку в первый раз. Вот почему вы всегда должны проверять свои вводные данные. Это самое простое, что я могу придумать. Другой вариант заключался в использованииUILabel
для текста, доступного только для чтения, но вы упускаете из виду большую функциональностьUITextView
.источник
Подкласс UITextView - swift 4.0
источник
Если вы хотите отключить всплывающее окно,
UITextField
попробуйте этотUITextFieldDelegate
метод для переключенияisUserInteractionEnabled
.источник
Это легко сделать в раскадровке (Xcode 6). Просто снимите флажок «Редактируемый и выбираемый» в инспекторе атрибутов. Вы все еще можете прокручивать текстовое представление.
источник
Это сработало для меня. Убедитесь, что вы вызываете resignFirstResponder в textView
источник
Я предоставил рабочий ответ здесь , чтобы отключить выделение текста + лупу, хранение позволило clikable ссылки Надежды , что помогает:
UIUnselectableTextView.m
источник
Для Swift 3 он изменен на:
источник
Вы можете исправить это в раскадровке, сняв флажки со следующих полей:
Или вы можете установить программно так:
источник
Я сделал это. На моем
UITextView
я очень легко отключил возможность вырезать, копировать, выбирать и т. Д.Я поместил a
UIView
в то же место, где я разместилUITextView
, ноself.view
и добавил следующийtouchDelegate
метод:и это сработало для меня. Спасибо.
источник
Swift
Связанный
источник
Если вы хотите добавить настраиваемую опцию в свой UITextView, но отключить существующие функции, вот как вы это делаете в Swift 3 :
Чтобы отключить функцию копирования, вставки, вырезания, создайте подкласс и переопределите следующее:
В ViewController у вас есть CustomTextView, чтобы добавить следующие параметры:
источник
Этот метод полностью отключит меню Select, Select All, Paste. Если вы по-прежнему получаете какое-то другое действие, просто добавьте его в условие if, как показано ниже.
источник
Вы можете просто создать такую категорию:
UITextView + Selectable.h
UITextView + Selectable.m
источник
Создание подклассов
UITextView
и переопределение- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
- еще одна возможность отключить нежелательные действия.Используйте класс
gestureRecognizer
-object, чтобы решить, нужно ли добавлять действие или нет.источник
(SWIFT) Если вам нужно только базовое текстовое поле без параметров меню или увеличительного стекла, создайте подкласс UITextField, возвращающий false для gestureRecognizerShouldBegin:
Это позволит обойти все функции касания в текстовом поле, но по-прежнему позволит вам использовать всплывающую клавиатуру для добавления / удаления символов.
Если вы используете раскадровку, просто назначьте вновь созданный класс текстовому полю или если вы создаете текстовое поле программно:
источник
источник
Swift 3
Для этого вам нужно создать подкласс своего UITextView и поместить этот метод.
источник
UITextView имеет два свойства, которые будут делать то, что вам нужно: isSelectable и isEditable. .
Если для isEditable установлено значение false, пользователь не сможет редактировать текст, а для isSelectable установлено значение false, чтобы пользователь не выделял текст внутри вашего textView, поэтому это предотвратит отображение меню действий.
источник
Пожалуйста, найдите образец кода для справки:
источник
Используйте
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }
вместоtextFieldShouldBeginEditing
.Создайте новый класс с именем StopPasteAction.swift
Добавьте новый класс класса с текущим TextField
источник