How to set the position of the cursor in UITextView

后端 未结 6 517
南旧
南旧 2020-12-07 21:12

I have an UITextView in my iPhone app which is editable.

New button is created inside the UITextView whenever user select a specific function.

As the butto

相关标签:
6条回答
  • 2020-12-07 21:50

    Try something like this:

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

    This will cause selectedRange to be executed on the main thread at the beginning of the next runloop.

    0 讨论(0)
  • 2020-12-07 21:57

    I know this is VERY late, but I thought I could help people stuck in this (like me).

    The performSelector:withObject:afterDelay seems to work fine (the other answers just wouldn't work for some strange reason):

    - (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); 
    } 
    

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

    0 讨论(0)
  • 2020-12-07 22:01
    textView.editable = YES;
    textView.selectedRange = NSMakeRange(2, 0);
    

    Set the selectedRange to a location with length of 0 and you probably also want the textView to be editable so also set that to YES.

    0 讨论(0)
  • 2020-12-07 22:11

    I use the following to get to the beginning of the textView, using Swift 4:

    DispatchQueue.main.async {
        self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument)
    }
    
    0 讨论(0)
  • 2020-12-07 22:11

    If you want to make Texview placeholder is required or optional like me. See my 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//
            }
          }
    

    Dont forget to register delegate: UITextViewDelegate

    0 讨论(0)
  • 2020-12-07 22:12

    change selectedRange of your textView. for example to place cursor at position 3:

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

    In your case, added some spaces on the textView contents might helps. and observer textview 's textDidChanged event to prevent these space will be deleted by user.

    0 讨论(0)
提交回复
热议问题