【问题标题】:How to set the position of the cursor in UITextView如何在 UITextView 中设置光标的位置
【发布时间】:2012-02-12 01:07:55
【问题描述】:

我的 iPhone 应用程序中有一个可编辑的 UITextView。

每当用户选择特定功能时,都会在 UITextView 内创建新按钮。

由于按钮始终位于文本视图的左侧,我需要将光标定位在按钮的右侧,以便用户可以看到他们正在输入的内容。 我似乎找不到记录(或未记录)的方法来设置光标的位置。

有没有人有任何想法或其他人有类似的成就?

【问题讨论】:

  • 你能发布一张图片来解释你想要做什么吗?
  • 我也想发布它,但我是新来的。声望低于 10 的不允许发图。 zzz

标签: ios objective-c iphone uitextview


【解决方案1】:

我知道这已经很晚了,但我想我可以帮助陷入困境的人(比如我)。

performSelector:withObject:afterDelay 似乎可以正常工作(其他答案由于某些奇怪的原因无法正常工作):

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

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

【讨论】:

  • @Cashew 这是有效的,但我不明白,为什么这在延迟后有效,而不是在 textViewDidBeginEditing 方法中?你能告诉我为什么这不能直接在该方法中工作...给你+1的解决方案....
  • @Sam 不知道,这只是我发现的一种破解方法。随着 Apple 更新他们的 SDK,这可能会停止工作
  • 对于 Swift,要在延迟后将多个参数传递给选择器,请在此处使用 @Matt 的延迟方法:stackoverflow.com/questions/24034544/…
【解决方案2】:
textView.editable = YES;
textView.selectedRange = NSMakeRange(2, 0);

将 selectedRange 设置为长度为 0 的位置,您可能还希望 textView 可编辑,因此也将其设置为 YES。

【讨论】:

    【解决方案3】:

    试试这样的:

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

    这将导致 selectedRange 在下一个 runloop 开始时在主线程上执行。

    【讨论】:

      【解决方案4】:

      我使用以下内容到达 textView 的开头,使用 Swift 4

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

      【讨论】:

        【解决方案5】:

        更改您的 textView 的 selectedRange。例如将光标放在位置 3:

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

        在您的情况下,在 textView 内容上添加一些空格可能会有所帮助。和观察者textview 's textDidChanged event 防止这些空间被用户删除。

        【讨论】:

        • 我在 textViewDidBeginEditing 中插入了这段代码,但它不起作用。光标在文本视图中的位置仍然在左侧。
        • 你的textView里面没有内容吗?在设置光标位置之前添加了一些空格。
        【解决方案6】:

        如果你想让 Texview 占位符像我一样是必需的或可选的。看看我的 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//
                }
              }
        

        别忘了注册代表:UITextViewDelegate

        【讨论】:

        • 问题不是占位符。无所谓的回答
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 2011-02-07
        • 1970-01-01
        相关资源
        最近更新 更多