Ios 光标未显示在UITextView中

Ios 光标未显示在UITextView中,ios,iphone,ipad,uitextfield,uitextview,Ios,Iphone,Ipad,Uitextfield,Uitextview,有人能想出闪烁的光标不会出现在UITextView中的原因吗?我有一个自定义控件,它只是UIView的一个子类,其中有一个UITextView,但光标在获得焦点时不会出现。键盘出现了,输入时文本也出现了,但是没有光标,我不知道为什么 有什么想法吗?..您可能已经更改了自定义UITextView中的色调。如果着色颜色与背景颜色相同(通常为白色),则它将显示为不可见。您可能未正确设置组件的contentSize和/或边框,使其太小而不可见,或者控件不在屏幕上。请在模拟器中转到Debug->Color

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


有什么想法吗?..

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

您可能未正确设置组件的
contentSize
和/或边框,使其太小而不可见,或者控件不在屏幕上。请在模拟器中转到
Debug->Color-Blended Layers
,查看这些值是否设置正确

编辑:


使用新的Xcode(可能在Xcode 6中引入),您可以通过单击“调试视图层次结构”(它是底部栏上的图标之一)调试此类问题。

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

文本字段显示光标,但您无法看到颜色,只是因为文本字段的色调设置为默认值,很可能与我的情况相同。 只需在故事板中选择文本字段,然后选择所需的链接颜色。请参阅随附的图片


简单的解决方法似乎是引入延迟,然后调用firstResponder,如下所示:

-(void)begin{

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

    [tf becomeFirstResponder];
}

在我的例子中,我在
viewDidLoad
方法中调用了
becomeFirstResponder
。我将呼叫移动到了
viewdide
,它对我有效。

上述解决方案在我的情况下不起作用。在我的例子中,问题是当
UITableViewCell
selectionStyle
不是
none
时,充当光标的
UIView
isOpaque
设置为
false
。这似乎只发生在我还没有弄清楚的比赛条件下

FWIW以下是我如何调试的:

  • 选择您的
    UITextFieldView
  • 打开调试视图层次结构。您应该会看到
    UI视图
    ,该视图表示光标处于正确位置,但它不会出现在UI中
  • 右键单击光标的
    ui视图
    ,然后选择“打印说明…”。说明表明
    obaque=NO
  • 不幸的是,拥有此
    UIView
    UITextSelectionView
    类是私有的,因此没有非黑客方式以编程方式更新
    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)
        }
    }
    

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

    对我来说,它不是tintColor,而是由重写caretRect方法引起的。取消这个方法解决了我的问题

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

    textview是UITextView还是UITextView的子类?textview只是一个标准的UITextView。不是子类,也没有自定义行为。在iOS 7中,我看到当用户键入时,光标被放错了模拟器中的导航栏。问题在设备上消失。您的问题是否发生在设备上?这不提供问题的答案。若要评论或要求作者澄清,请在他们的帖子下方留下评论。作者想知道为什么他看不到光标,所以我的想法是,整个组件或部分组件(其中一个属性)的框架可能设置不当。这可以解决他的问题,因为事实上这可能是他的问题。他没有提供任何代码片段,所以我们只能根据知识进行猜测。如果你仍然觉得我没有回答,请建议我编辑:)这帮助我看到了背景色问题。这是一个好主意,但它只是一个标准的白色UITextView,并且色调没有改变。它也适用于UITEXTFIELD。我也遇到过这样的情况,在另一个视图中,其他开发人员更改了色调。我不知道为什么,当我回到我的视图时,光标被隐藏了。我需要在视图中重新设置色调,视图将以编程方式显示。在情节提要中将“色调颜色”设置为默认值时,我遇到了这个问题。设置另一种颜色,默认返回使光标显示。另外,由于调试视图层次结构会话,它有点明显,这似乎是问题所在。着色颜色被设置为“默认”,是蓝色的,但我认为它显示为白色,这是我在其他控件中注意到的。我在IB中将它改为红色,它显示为红色。然后我把它改成了蓝色,而不是“默认”,最后它变成了蓝色,应该是注释。