UITextViewでコピー禁止&選択範囲を非表示にする方法

iOSのUITextViewで入力禁止&コピー禁止&テキストの選択範囲を非表示にする方法。
UITextViewのコピー禁止までの情報はあっても、一連の流れで選択範囲を非表示にするところまで書いてあるのが見つからなかったのでまとめます。

目標、「長押しや、ダブルタップ」時に、何も反応させないようにする。
textview_1

普通のUITextViewの実装に、ふたつコードを加えます。

#import "ViewController.h"

// 1, UITextViewのcanBecomeFirstResponderをオーバーライド
@implementation UITextView(Private)
- (BOOL)canBecomeFirstResponder {
    return NO;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 普通のUITextViewの実装
    UITextView *tv = [[UITextView alloc] initWithFrame:self.view.bounds];
    [tv setFont:[UIFont systemFontOfSize:25]];
    [tv setText:@"スクロールはしたいけど、選択範囲は表示させたくないんだよねー。\nスクロールはしたいけど、選択範囲は表示させたくないんだよねー。\nスクロールはしたいけど、選択範囲は表示させたくないんだよねー。\nスクロールはしたいけど、選択範囲は表示させたくないんだよねー。\nスクロールはしたいけど、選択範囲は表示させたくないんだよねー。\nスクロールはしたいけど、選択範囲は表示させたくないんだよねー。\nスクロールはしたいけど、選択範囲は表示させたくないんだよねー。\nスクロールはしたいけど、選択範囲は表示させたくないんだよねー。"];
    [tv setEditable:false]; // 入力禁止
    [self.view addSubview:tv];

    // 2, UITextViewのジェスチャーを修正
    for (UIGestureRecognizer *recognizer in tv.gestureRecognizers) {
        if ([recognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
            recognizer.enabled = NO;
        }
    }
}

@end

「1, UITextViewのcanBecomeFirstResponderをオーバーライド」だけだとこんな感じで選択範囲が残ってしまいます。。。
textview_2

コピーできないのに選択範囲が表示されてるとか誰得?な機能なので消します。
「2, UITextViewのジェスチャーを修正」の部分を追記して、目標達成!
textview_3
Swiftでも文法が違うだけで、やる事は同じでしょう。知りませんが。

参考:
http://gganghi.blogspot.jp/2012/08/uitextview.html
http://sonsofbasil.blog55.fc2.com/blog-entry-24.html
http://stackoverflow.com/questions/3893387/how-to-intercept-long-press-on-uitextview

 

  • このエントリーをはてなブックマークに追加
  • Pocket

関連記事-こちらもどうぞ

  • 記事はありませんでした。これから充実させていきますのでお楽しみに!

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

CAPTCHA