UITextViewでコピー禁止&選択範囲を非表示にする方法
iOSのUITextViewで入力禁止&コピー禁止&テキストの選択範囲を非表示にする方法。
UITextViewのコピー禁止までの情報はあっても、一連の流れで選択範囲を非表示にするところまで書いてあるのが見つからなかったのでまとめます。
目標、「長押しや、ダブルタップ」時に、何も反応させないようにする。
普通の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をオーバーライド」だけだとこんな感じで選択範囲が残ってしまいます。。。
コピーできないのに選択範囲が表示されてるとか誰得?な機能なので消します。
「2, UITextViewのジェスチャーを修正」の部分を追記して、目標達成!
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
この記事へのコメントはこちら