光标未显示在 UITextView

Posted

技术标签:

【中文标题】光标未显示在 UITextView【英文标题】:Cursor not showing up in UITextView 【发布时间】:2014-01-06 21:10:03 【问题描述】:

谁能想到闪烁光标不会出现在UITextView 中的原因?我有一个自定义控件,它只是UIView 的子类,其中有一个UITextView,但是当它获得焦点时光标不会出现。出现键盘,键入时出现文本,但没有光标,我不知道为什么。

有什么想法吗?...

【问题讨论】:

textview 是 UITextView 还是 UITextView 的子类? textview 只是一个标准的 UITextView。不是子类,也没有自定义行为。 ios 7 中,我看到在用户键入时光标错放在模拟器中的导航栏上。该问题在设备上消失了。您的问题是否出现在设备上? 【参考方案1】:

您可能已经更改了自定义 UITextView 中的色调颜色。如果色调颜色与背景颜色相同(通常为白色),则它会显得不可见。

【讨论】:

这个想法不错,但只是标准的白色UITextView,而且tint颜色没有改变。 同样适用于 UITextField 我也遇到了这样的情况,在另一个视图中,其他开发人员更改了色调。我不知道为什么,当我回到我的视图时,光标被隐藏了。我需要在视图中重新设置色调将以编程方式显示。 在情节提要中将色调颜色设置为默认值时遇到了这个问题。设置另一种颜色,默认返回光标出现。由于调试视图层次结构会话,它也有点可见 这似乎是问题所在。色调颜色设置为“默认”,即蓝色,但我认为它显示为白色,我在其他控件中注意到了这一点。我在 IB 中将其更改为红色,它显示为红色。然后我把它改成蓝色,而不是“默认”,它最终显示为蓝色。【参考方案2】:

您可能为组件设置了不正确的contentSize 和/或框架,因此它太小而无法看到或控件不在屏幕上。请在模拟器中到Debug->Color Blended Layers查看这些值是否设置正确。

编辑:

使用新的 Xcode(可能在 Xcode 6 中引入),您可以通过单击“Debug View Hierarchy”(它是底部栏上的图标之一)来调试此类问题

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。 作者想知道为什么他看不到光标的原因,所以我的想法是整个组件或其一部分(属性之一)的框架可能设置不当。这可以解决他的问题,因为这实际上可能是他的问题。他没有提供任何代码片段,所以我们只能根据知识猜测。如果您仍然觉得我没有回答,请建议我进行编辑:) 这帮助我看到了背景颜色问题。【参考方案3】:

文本字段正在显示光标,但您看不到颜色,只是因为您的文本字段的色调设置为默认值,很可能就像我的情况一样。 只需在情节提要中选择您的 textField 并选择您希望的链接颜色。参考附图。

【讨论】:

【参考方案4】:

我更改了所有 UITextView 的色调颜色,并且光标开始显示在下一次构建中。

【讨论】:

应该是评论。【参考方案5】:

通过引入延迟然后调用 firstResponder 似乎可以实现简单的解决方法,如下所示:

-(void)begin

    [self performSelector:@selector(first) withObject:nil afterDelay:0.01f];

-(void)first

    [tf becomeFirstResponder];

【讨论】:

【参考方案6】:

就我而言,我在viewDidLoad 方法中调用了becomeFirstResponder。我把电话转到viewDidAppear,它对我有用。

【讨论】:

【参考方案7】:

对我来说,问题是由在 UIToolbar 中嵌入 UITextField 引起的。将容器替换为简单的UIView 后,光标再次工作。

【讨论】:

【参考方案8】:

上述解决方案不适用于我的情况。在我的例子中,问题是当UITableViewCellselectionStyle 不是none 时,充当光标的UIViewisOpaque 设置为false。这似乎只发生在我还没有深究的竞争条件下。

FWIW 我是这样调试的:

    选择您的UITextFieldView 打开调试视图层次结构。您应该会看到 UIView 代表光标处于正确位置,但它不会出现在 UI 中。 右键单击光标的UIView 并选择“打印说明...”。描述表明OPAQUE=NO

不幸的是,拥有这个UIViewUITextSelectionView 类是私有的,因此没有非hacky 的方式来以编程方式更新isOpaque

这似乎不是每个实现中的问题,但是,这是我的观点之间的关系。

我的文本视图委托

extension FooViewController: UITextViewDelegate 
    private func updateSelection(selectedIndex indexPath: IndexPath) 
        if let oldSelected = self.table.indexPathForSelectedRow 
            tableDelegate.tableView(table, didDeselectRowAt: oldSelected)
        
        tableDelegate.tableView(table, didSelectRowAt: indexPath)
    

    func textViewShouldBeginEditing(_ textView: UITextView) -> Bool 
        guard let rowCell = getParentCell(forTextView: textView), // loops through table row cells
            !rowCell.isSelected,
            let indexPath = self.table.indexPath(for: rowCell)
            else  return true 

        updateSelection(selectedIndex: indexPath)
        return false
    

和我的表代表:

class TableViewDelegate: NSObject, UITableViewDelegate 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)        
        tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableView.ScrollPosition.none)
    

【讨论】:

【参考方案9】:

对我来说,这不是 tintColor,它是由覆盖 caretRect 方法引起的。删除此方法解决了我的情况

open override func caretRect(for position: UITextPosition) -> CGRect 
       return CGRect.zero
   

【讨论】:

【参考方案10】:

我的工作拐杖:

   DispatchQueue.main.async 
           
      self.textView.becomeFirstResponder()
      self.textView.insertText(" ")
      self.textView.deleteBackward()
 

【讨论】:

以上是关于光标未显示在 UITextView的主要内容,如果未能解决你的问题,请参考以下文章

VuetifyJS,路由器链接未显示为光标

光标未在我们的应用程序的 UISearchBar 中显示

android光标未关闭错误

AppcompatEditText 未显示 android:textCursorDrawable="@null" 和自定义背景集的光标

光标线的颜色在哪里定义?

如何使用光标和循环显示来自 sqlite 的片段的 recyclerview