光标未显示在UITextView中


70

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

有什么想法吗?...


textview是UITextView还是UITextView的子类?
Hetal Vora 2014年

textview只是一个标准的UITextView。不是子类,也没有自定义行为。
SeanT 2014年

在iOS 7中,我已经看到用户在键入时将光标放到模拟器的导航栏中。问题在设备上消失。您的问题是否出现在设备上?
bilobatum 2014年

Answers:


218

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


这是一个好主意,但这只是一个标准的白色UITextView,并且色调颜色未更改。
SeanT 2014年

2
它也适用于UITextField
Lukasz 2014年

我也有这样的情况,在另一种观点下,其他一些开发人员改变了色彩。我不知道为什么,当我回到视图中时光标被隐藏了。我需要重新设置色调,以编程方式显示。
2015年

遇到此问题,在情节提要中将颜色设置为默认颜色。设置另一种颜色,默认显示后置光标。此外,由于调试视图层次结构会话,它也有点可见
Dren

这似乎是问题所在。色彩设置为蓝色的“默认”,但我认为它显示为白色,我在其他控件中注意到了这一点。我在IB中将其更改为红色,并显示为红色。然后我将其更改为蓝色,而不是“默认”,最后它显示为蓝色。
SeanT '16

9

您可能为组件设置了不正确的contentSize和和/或框架,以至于它太小而看不见或控件不在屏幕上。请进入模拟器以Debug->Color Blended Layers查看这些值是否设置正确。

编辑:

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


3
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论。
皮埃尔·卢克·皮诺

7
作者想要一些想法,为什么他看不到光标,所以我的想法是整个组件或部分组件(属性之一)的框架可能设置不正确。这可以解决他的问题,因为实际上可能是他的问题。他没有提供任何代码片段,因此我们只能根据知识进行猜测。如果您仍然觉得我没有回答,请建议我编辑一下:)
朱利安·克罗尔(JulianKról)2014年

这帮助我看到了背景色问题。
divergio

3

文本字段正在显示光标,但是您无法看到颜色,仅仅是因为您的文本字段的色彩设置很可能是默认的,就像我的情况一样。只需在情节提要中选择textField,然后选择所需的链接颜色即可。请参阅所附图像。

在此处输入图片说明



1

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

-(void)begin{

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

    [tf becomeFirstResponder];
}

1
这个对我有用。感谢您发布此信息。
Dnyaneshwar Wakchaure


0

对我来说,问题是由于将嵌入到UITextField中引起的UIToolbar。一旦我将容器替换为简单容器UIView,光标就会再次起作用。


0

上面的解决方案不适用于我的情况。在我的情况的问题是,UIView当光标已经充当isOpaque设置为falseUITableViewCellselectionStyle是什么,但none。这似乎只发生在我尚未触底的比赛条件下。

FWIW这是我调试的方法:

  1. 选择你的 UITextFieldView
  2. 打开调试视图层次结构。您应该看到UIView将光标指示在正确位置的,但它不会出现在UI中。
  3. 右键单击光标,UIView然后选择“打印说明...”。描述指示OPAQUE=NO

不幸的是,UITextSelectionView拥有此类的类UIView是私有的,因此没有以编程方式更新的非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)
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.