Posted at

UITextViewでURLや電話番号をリンク化しつつ編集可能にする方法

More than 5 years have passed since last update.

UITextViewにはURL、日付、電話番号、住所を自動的に検出してリンクにする機能がありますが、これを有効にするにはeditableプロパティをNOにして編集不可にしなければなりません。編集が不可だと文字通り編集できず、画面をタップしてもキーボードが出てきません。しかし、アップル製メモアプリでは閲覧時にはリンクを有効にしつつも、画面をタップすると編集できます。これと同じことを実現する方法を開示します。


Objective-C


- (void)viewDidLoad
{
[super viewDidLoad];
self.textView.delegate = self;
self.textView.dataDetectorTypes = UIDataDetectorTypeAll;
self.textView.editable = NO;
[self.textView addGestureRecognizer:[[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleGesture:)]];
}

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
self.textView.editable = YES;
CGPoint touchPoint = [gestureRecognizer locationInView:self.textView];
UITextPosition *position = [self.textView closestPositionToPoint:touchPoint];
self.textView.selectedTextRange = [self.textView textRangeFromPosition:position
toPosition:position];
[self.textView becomeFirstResponder];
}

- (void)textViewDidEndEditing:(UITextView *)textView
{
self.textView.editable = NO;
}