【问题标题】:iOS -- dealing with the inability to set the cursor position in a UITextFieldiOS——处理无法在 UITextField 中设置光标位置的问题
【发布时间】:2011-01-04 16:03:48
【问题描述】:

我正在开发一个将使用自定义键盘进行文本输入的应用程序。键盘应该有“前进”和“后退”键。

一些关于 SO 的搜索表明不可能以编程方式在 UITextField 中设置光标位置。

我已经研究过使用 UITextView 代替。这确实允许设置光标位置。但是滚动行为变得非常烦人。

我想知道是否有人知道一个好的解决方法。基本上,我想要有文本和光标的东西,我可以通过编程设置光标位置。

编辑:有趣的是,如果我在模拟器中有一个 UITextField 并且我按下我的 mac 键盘上的前进或后退箭头键,光标会向前或向后移动。但是,我看不到任何方法可以在设备上模仿这种行为。 . .或者,就此而言,在模拟器屏幕上单击鼠标。

【问题讨论】:

    标签: iphone ios cursor uitextfield cursor-position


    【解决方案1】:

    当时接受的答案是正确的,但现在已经过时了。在 iOS 5 中,UITextField 符合 UITextInput 协议。因此可以通过 selectedTextRange 属性设置光标位置。

    【讨论】:

      【解决方案2】:

      我还使用 UITextView 来设置光标位置。

      如果你继承 UITextView(它本身是 UIScrollView 的特化),你可以覆盖“scrollingEnabled”并返回 NO:

      - (BOOL) scrollingEnabled   
      {
          return NO;
      }
      

      我还必须使用 contentInset 和 contentOffset 属性才能得到我想要的。

      【讨论】:

      • 即使我在初始化时设置 self.scrollEnabled=NO 并覆盖 isScrollEnabled 以始终返回 NO,它仍然可以在选择时向上滚动。 (“可能”取决于相对于视图大小的字体大小。)
      • 对不起;你是对的。我的项目中有一些死代码。我确实将 scrollEnabled 设置为 NO,并且我必须调整视图大小并跟踪字段的输入以避免完全滚动。
      • 我接受这个,因为它走在正确的道路上。但我认为禁用滚动的最佳方法是使用 scrollToRectVisible 的空实现。
      • 你对 contentInset 和 contentOffset 做了什么?我一直在玩 contentInset 来尝试匹配 UITextField。到目前为止,很明显正确答案取决于字体大小,但我不明白其中的关系。
      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2010-12-02
      相关资源
      最近更新 更多