2009-10-28 4 views
36

Можно создать дубликат:
How disable Copy, Cut, Select, Select All in UITextViewUITextView отключить выделение текста

Я с трудом получает UITextView отключить выбирающий текст.

Я пробовал:

canCancelContentTouches = YES; 

Я попытался подклассов и перезапись:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 

(Но это вызывается только после выбора)

- (BOOL)touchesShouldCancelInContentView:(UIView *)view; 

(I не видят, что уволили вообще)

- (BOOL)touchesShouldBegin:(NSSet *)touches 
       withEvent:(UIEvent *)event 
      inContentView:(UIView *)view; 

(я не вижу, что уволят либо)

Что мне не хватает?

+2

Так как невозможно добавить ответы на это: обратите внимание, BEST ответ здесь (IMHO) на самом деле является комментарием Александра: поскольку iOS 7 есть @property (неатомный, getter = isSelectable) BOOL выбирается NS_AVAILABLE_IOS (7_0) – Epaga

+0

У меня вопрос возобновлен и добавлен 'sele ctable' как правильный ответ. Ура! –

ответ

73

выпуск How disable Copy, Cut, Select, Select All in UITextView имеет приемлемое решение для этого, что я просто реализован и проверен:

Подкласс UITextView и перезаписать canBecomeFirstResponder:

- (BOOL)canBecomeFirstResponder { 
    return NO; 
} 

Обратите внимание, что й отключает ссылки и другое отображаемое текстовое содержимое.

+4

Этот ответ должен быть принят imho. – Craimasjien

+0

Спасибо, это сработало для моих нужд. – masgar

+0

Ответ Джеймса М работает лучше. – jowie

5

Если вы просто хотите предотвратить его редактирование, установите для свойства UITextView "editable" значение NO/False.

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

+1

Я не хочу, чтобы оно редактировалось или выбиралось. – dizy

+0

Нужно ли это прокручивать? – TechZen

+1

Да, мне нужно прокрутить. – dizy

1

Вы пытались установить userInteractionEnabled для NO для своего UITextView? Но вы тоже потеряете прокрутку.

Если вам нужна прокрутка, вероятно, вы использовали UITextView, а не UILabel, тогда вам нужно сделать больше работы. Вы, вероятно, придется переопределить canPerformAction:withSender: вернуть NO действия, которые вы не хотите, чтобы:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    switch (action) { 
     case @selector(paste:): 
     case @selector(copy:): 
     case @selector(cut:): 
     case @selector(cut:): 
     case @selector(select:): 
     case @selector(selectAll:): 
     return NO; 
    } 
    return [super canPerformAction:action withSender:sender]; 
} 

Для более, UIResponderStandardEditActions.

+1

Я упомянул, что я уже пробовал это: canPerform не вызывается до тех пор, пока вы не сделаете выбор – dizy

+0

Downvote: это не помешает разрезанию/copy/define из панели инструментов - на этой странице представлены лучшие решения. – Gerard

9

Похоже, что вы действительно хотите, это гигантский UILabel внутри UIScrollView, а не UITextView.

обновление: если вы на более новых версиях IOS UILabel теперь имеет свойство линии:

Multiple lines of text in UILabel

+1

Да, я думаю. Будет следующая вещь, которую я сделаю, если я этого не пойму. – dizy

+0

thanx dude, я не знаю о дизи, но мне действительно нужен UILabel. –

+0

UILabel предотвратит разрывы строк. Вы хотите UITextView без взаимодействия с пользователем ... и тогда вы хотите, чтобы внутри UIScrollView. В качестве альтернативы вы можете отображать прозрачный UIWebView с текстом в текстовом элементе в UIWebView (просто используйте loadHTML для импорта текста/кода в UIWebView (включая код CSS, чтобы сделать фон прозрачным), тогда вы можете использовать javascript для его создания не выбирается, но все еще прокручивается). –

45

Я обнаружил, что вызов

[textView setUserInteractionEnabled:NO]; 

работает достаточно хорошо.

+26

Это также отключит функцию прокрутки на UITextView –

+10

И отключит возможность нажимать ссылки – barfoon

+2

Я использую uitextview как подвид в пользовательском uitableviewcell. Он работает как сон –

7

UITextView «s selectable свойство:

Это свойство управляет способностью пользователя выбрать содержание и взаимодействовать с адресами и текстовыми приложениями. Значение по умолчанию - YES.

1

Чтобы сделать этот первый подкласс UITextView

и в реализации необходимо выполнить следующие действия

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event 
{ 
    self.selectable = NO; 
} 

- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event 
{ 
     self.selectable = YES; 
} 

это должно работать нормально,

Смежные вопросы