Как отключить копирование, вырезание, выделение, выделение всего в UITextView - PullRequest
102 голосов
/ 15 сентября 2009

Функции UITextView Копировать, Вырезать, Выбрать, Выбрать все отображаются по умолчанию, когда я нажимаю на экран. Но в моем проекте UITextField только для чтения. Мне не требуется эта функциональность. Подскажите пожалуйста как отключить эту функцию.

Ответы [ 28 ]

4 голосов
/ 03 апреля 2018

Подкласс UITextView - swift 4.0

     override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        return false
    }
4 голосов
/ 23 февраля 2014

Начиная с iOS 7, в UITextView есть свойство:

 @property(nonatomic,getter=isSelectable) BOOL selectable;

Это не позволяет представлению разрешать выбор текста. Прекрасно работает для меня.

2 голосов
/ 13 августа 2015

Это можно легко сделать в раскадровке (Xcode 6). Просто снимите флажок Редактируемый и Выбираемый в Инспекторе Атрибутов. Вы все еще можете прокрутить текстовое представление. enter image description here

2 голосов
/ 09 марта 2015

Я предоставил рабочий ответ здесь , чтобы отключить выбор текста + экранную лупу, сохраняя включенные кликабельные ссылки Надеюсь, это поможет:

После довольно долгой попытки мне удалось остановить выделение текста, увеличение и сохранение обнаружения данных (ссылки активируются и т. Д.) Путем переопределения addGestureRecognizer для подкласса UITextView, разрешающего только задержку окончания касания UILongPressGestureRecognizer:

UIUnselectableTextView.m

-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
    if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && gestureRecognizer.delaysTouchesEnded)
    {
        [super addGestureRecognizer:gestureRecognizer];
    }
}
2 голосов
/ 18 августа 2016

Для Swift 3 изменено на:

override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return false
}
2 голосов
/ 24 марта 2013

Это сработало для меня. Убедитесь, что вы вызываете resignFirstResponder для textView

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
  [self.textView resignFirstResponder];
  return NO;
}
1 голос
/ 09 ноября 2009

Я сделал это. На моем UITextView я очень легко отключил функцию вырезания, копирования, выбора и т. Д.

Я поместил UIView в то же место, где разместил UITextView, но на self.view и добавил метод touchDelegate следующим образом:

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *scrollTouch=[touches anyObject];
    if(scrollTouch.view.tag==1)
    {
        NSLog(@"viewTouched");
        if(scrollTouch.tapCount==1)
            [textView1 becomeFirstResponder];
        else if(scrollTouch.tapCount==2)
        {
            NSLog(@"double touch");
            return;
        }

    }
}

и у меня это сработало. Спасибо.

1 голос
/ 26 сентября 2015

Swift

textView.selectable = false // disable text selection (and thus copy/paste/etc)

Относящиеся

textView.editable = false // text cannot be changed but can still be selected and copied
textView.userInteractionEnabled = false // disables all interaction, including scrolling, clicking on links, etc.
1 голос
/ 10 сентября 2018

Если вы хотите отключить всплывающее окно для UITextField, попробуйте этот метод UITextFieldDelegate для переключения isUserInteractionEnabled.

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    textField.isUserInteractionEnabled = false
    return true
}
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    textField.isUserInteractionEnabled = true
    return true
}
1 голос
/ 06 сентября 2017

Если вы хотите добавить пользовательский параметр в свой UITextView, но отключить существующие функции, вы можете сделать это на Swift 3 :

Чтобы отключить копирование, вставьте, обрежьте функциональность, создайте подкласс и переопределите следующее:

override public func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return false
} 

В ViewController у вас есть CustomTextView, добавьте следующее, чтобы добавить ваши опции:

  let selectText = UIMenuItem(title: "Select", action: #selector(ViewController.selected))

    func selected() {

    if let selectedRange = textView.selectedTextRange, let 
     selectedText = textView.text(in: selectedRange) {

     }


    print("User selected text: \(selectedText)")

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...