wake-up-neo.com

Festlegen der Position des Cursors in UITextView

Ich habe eine UITextView in meiner iPhone-App, die bearbeitet werden kann. 

Die neue Schaltfläche wird in UITextView erstellt, wenn der Benutzer eine bestimmte Funktion auswählt. 

Da die Schaltfläche in der Textansicht immer auf der linken Seite platziert wird, muss der Cursor auf der rechten Seite der Schaltfläche positioniert werden, damit der Benutzer sehen kann, was er eingibt (oder undokumentierte) Methode, um die Position des Cursors festzulegen.

Hat jemand irgendwelche Ideen oder hat jemand anderes etwas Ähnliches erreicht?

29
GURU

Ich weiß, dass dies sehr spät ist, aber ich dachte, ich könnte den Leuten helfen, die hier stecken (wie ich).

Der performSelector:withObject:afterDelay scheint gut zu funktionieren (die anderen Antworten würden aus irgendeinem merkwürdigen Grund nicht funktionieren):

- (void)textViewDidBeginEditing:(UITextView *)inView 
{ 
[self performSelector:@selector(setCursorToBeginning:) withObject:inView afterDelay:0.01]; 
} 

- (void)setCursorToBeginning:(UITextView *)inView 
{ 
//you can change first parameter in NSMakeRange to wherever you want the cursor to move
inView.selectedRange = NSMakeRange(3, 0); 
} 

quelle: http://puppenspieler.tumblr.com/post/757819650/set-selectedrange-in-a-uitextview

52
Cashew
textView.editable = YES;
textView.selectedRange = NSMakeRange(2, 0);

Setzen Sie den ausgewählten Bereich auf eine Position mit der Länge 0, und Sie möchten möglicherweise auch, dass die Textansicht bearbeitet werden kann. Setzen Sie den Wert auf YES.

21
Evan

Versuchen Sie etwas so:

dispatch_async(dispatch_get_main_queue(), ^{
    inView.selectedRange = NSMakeRange(3, 0);
});

Dies bewirkt, dass selectedRange zu Beginn des nächsten Runloop im Hauptthread ausgeführt wird.

17
acavanagh

Ich verwende Folgendes, um mit Swift 4 an den Anfang der Textansicht zu gelangen:

DispatchQueue.main.async {
    self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument)
}
4
blwinters

ändern Sie selectedRange in Ihrer Textansicht. Zum Beispiel, um den Cursor auf Position 3 zu setzen:

[textView setSelectedRange:NSMakeRange(3, 0)];

In Ihrem Fall können einige Leerzeichen im textView-Inhalt hilfreich sein. und Beobachter textview 's textDidChanged event, um diese Leerzeichen zu verhindern, werden vom Benutzer gelöscht.

3
xhan

Wenn Sie einen Textview-Platzhalter erstellen möchten, ist dieser optional oder optional. Sieh meinen Hack 

 func textViewDidBeginEditing(textView: UITextView) {
        if textView.text.isEmpty {
          if self.text == "Required" || self.text == "Optional" {
            dispatch_async(dispatch_get_main_queue(), {
              textView.selectedRange = NSMakeRange(0, 0)
            });
          }
        }
      }

      func textViewDidEndEditing(textView: UITextView) {
        if CommonUtils.isEmptyString(textView.text) {
          if required {
            textView.text = "Required"
          } else {
            textView.text = "Optional"
          }
          textView.textColor = grayColor//
        }
      }

      func textViewDidChange(textView: UITextView) {
        if textView.text.isEmpty {
          if required {
            textView.text = "Required"
          } else {
            textView.text = "Optional"
          }
          textView.textColor = grayColor
          textView.selectedRange = NSMakeRange(0, 0)
        } else {
          if required {
            if textView.text.length > "Required".length {
              textView.text = self.text.replace("Required", withString: "")
            }
          } else {
            if textView.text.length > "Optional".length {
              textView.text = self.text.replace("Optional", withString: "")
            }
          }
          textView.textColor = blackColor//
        }
      }

Vergessen Sie nicht, den Delegierten zu registrieren: UITextViewDelegate

0
Rico Nguyen