web-dev-qa-db-ja.com

カーソルがUITextViewに表示されない

点滅するカーソルがUITextViewに表示されない理由は誰でも考えられますか? UIViewのサブクラスであるカスタムコントロールがあり、その中にUITextViewがありますが、カーソルがフォーカスを取得しても表示されません。キーボードが表示され、入力中にテキストが表示されますが、カーソルはありません。その理由はわかりません。

何かご意見は?...

64
SeanT

カスタムUITextViewの色合いを変更した可能性があります。濃淡の色が背景色(通常は白)と同じ場合、見えなくなります。

198
lehn0058

コンポーネントのcontentSizeやフレームを不適切に設定して、表示するには小さすぎるか、コントロールが画面外にある可能性があります。シミュレーターでDebug->Color Blended Layersこれらの値が正しく設定されているかどうかを確認します。

編集:

新しいXcode(おそらくXcode 6で導入された)を使用すると、[ビュー階層のデバッグ]をクリックしてこの種の問題をデバッグできます(下のバーのアイコンの1つです)。

7
Julian Król

テキストフィールドにはカーソルが表示されていますが、テキストフィールドの濃淡の色がおそらく私の場合のようにデフォルトに設定されているため、色を見ることができません。ストーリーボードでtextFieldを選択し、希望のリンク色を選択します。添付の画像を参照してください。

enter image description here

3
Kunal Gupta

すべてのUITextViewの色合いを変更すると、次のビルドでカーソルが表示され始めました。

2
Andy Bernard

私の場合、becomeFirstResponderメソッドでviewDidLoadを呼び出しました。呼び出しをviewDidAppearに移動しましたが、うまくいきました。

1
Vladimir Vlasov

次のように、遅延を導入してからfirstResponderを呼び出すことで、簡単な回避策が機能するようです。

-(void)begin{

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

    [tf becomeFirstResponder];
}
1
Johnny Rockex

私の場合、上記の解決策は機能しませんでした。私の場合の問題は、UIViewisOpaqueが何かであるときに、カーソルとして機能するfalseUITableViewCellselectionStyleに設定されていることです。しかし、none。これは、私がまだ最後まで進んでいない競合状態でのみ発生するようです。

FWIWはこれをどのようにデバッグしたのですか?

  1. UITextFieldViewを選択します
  2. デバッグビュー階層を開きます。カーソルを正しい位置に表すUIViewが表示されるはずですが、UIには表示されません。
  3. カーソルのUIViewを右クリックして、[説明の印刷...]を選択します。説明はOPAQUE=NOを示します

残念ながら、このUITextSelectionViewを所有するUIViewクラスはプライベートであるため、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)
    }
}
0
TolkienWASP

私にとっては、UITextFieldUIToolbarを埋め込むことで問題が発生しました。コンテナーを単純なUIViewに置き換えたら、カーソルは再び機能しました。

0
FD_