2013-12-18 4 views
3

Целью моего вопроса является приложение для заметок, такое как iOS. Точка приложения примечания iOS заключается в том, что они предоставляют пользователю возможность использовать ссылку гиперссылки или номер телефона или адрес электронной почты в качестве синего текста, и мы можем редактировать текст одновременно.Как перемещать курсор UITextView в TOUCHED LOCATION?

Обычно, когда мы нажимаем UITextView, он помещает курсор туда, где мы касались. но если я использую dataDetectorTypes UITextView, чтобы поместить такие вещи, как номер телефона или http-ссылки, такие как приложение примечания iOS, я должен установить его нередактируемым, иначе ссылка не будет работать. Это означает, что я не могу щелкнуть UITextView и редактировать текст.

, но я мог бы установить его для редактирования, используя приведенный ниже код

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self 
    action:@selector(editTextRecognizerTabbed:)]; 

-

- (BOOL) editTextRecognizerTabbed:(UITapGestureRecognizer *) aRecognizer 
{ 
    textview.editable = YES; 
    textview.dataDetectorTypes = UIDataDetectorTypeNone; 
    [textview becomeFirstResponder]; 
} 

и теперь я мог редактировать текст и все работает нормально, но проблема заключается в том, что она всегда начинается конец текста , поэтому пользователь должен нажать еще раз туда, где они хотят писать. и я понимаю причину.

СЕЙЧАС Я хочу переместить курсор в место, где я нажал в первой точке, и я получил координату, используя [aRecognizer locationInView: view];

ТАК КАК ПЕРЕСМОТРЕТЬ КУРСОР В UITextView К МЕСТУ Я ПОЛУЧИЛ ОТ ПРИЗНАНИЯ?

Спасибо.

+0

Это нормальное поведение IOS. – Bot

ответ

8
- (void) editTextRecognizerTabbed:(UITapGestureRecognizer *) aRecognizer 
{ 
    if (aRecognizer.state==UIGestureRecognizerStateEnded) 
    { 
     //Not sure if you need all this, but just carrying it forward from your code snippet 
     textview.editable = YES; 
     textview.dataDetectorTypes = UIDataDetectorTypeNone; 
     [textview becomeFirstResponder]; 

     //Consider replacing self.view here with whatever view you want the point within 
     CGPoint point = [aRecognizer locationInView:self.view]; 
     UITextPosition * position=[textView closestPositionToPoint:point]; 
     [textView setSelectedTextRange:[textView textRangeFromPosition:position toPosition:position]]; 
    } 
} 
+0

Он отлично работает. Хорошего дня! –

+0

Нет проблем, пожалуйста, отметьте ответ как «принятый». –

0

Над Ответ скор 4:

tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.textViewTapped(recognizer:))) 
textView.addGestureRecognizer(tapGesture) 

@objc func textViewTapped(recognizer: UITapGestureRecognizer) { 
    if recognizer.state == .ended {  
     textView.isEditable = true 
     textView.becomeFirstResponder() 

     let location = recognizer.location(in: textView) 
     if let position = textView.closestPosition(to: location) { 
      let uiTextRange = textView.textRange(from: position, to: position) 

      if let start = uiTextRange?.start, let end = uiTextRange?.end { 
       let loc = textView.offset(from: textView.beginningOfDocument, to: position) 
       let length = textView.offset(from: start, to: end) 

       textView.selectedRange = NSMakeRange(loc, length) 

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