点滅するカーソルがUITextView
に表示されない理由は誰でも考えられますか? UIView
のサブクラスであるカスタムコントロールがあり、その中にUITextView
がありますが、カーソルがフォーカスを取得しても表示されません。キーボードが表示され、入力中にテキストが表示されますが、カーソルはありません。その理由はわかりません。
何かご意見は?...
カスタムUITextViewの色合いを変更した可能性があります。濃淡の色が背景色(通常は白)と同じ場合、見えなくなります。
コンポーネントのcontentSize
やフレームを不適切に設定して、表示するには小さすぎるか、コントロールが画面外にある可能性があります。シミュレーターでDebug->Color Blended Layers
これらの値が正しく設定されているかどうかを確認します。
編集:
新しいXcode(おそらくXcode 6で導入された)を使用すると、[ビュー階層のデバッグ]をクリックしてこの種の問題をデバッグできます(下のバーのアイコンの1つです)。
すべてのUITextViewの色合いを変更すると、次のビルドでカーソルが表示され始めました。
私の場合、becomeFirstResponder
メソッドでviewDidLoad
を呼び出しました。呼び出しをviewDidAppear
に移動しましたが、うまくいきました。
次のように、遅延を導入してからfirstResponderを呼び出すことで、簡単な回避策が機能するようです。
-(void)begin{
[self performSelector:@selector(first) withObject:nil afterDelay:0.01f];
}
-(void)first{
[tf becomeFirstResponder];
}
私の場合、上記の解決策は機能しませんでした。私の場合の問題は、UIView
のisOpaque
が何かであるときに、カーソルとして機能するfalse
にUITableViewCell
がselectionStyle
に設定されていることです。しかし、none
。これは、私がまだ最後まで進んでいない競合状態でのみ発生するようです。
FWIWはこれをどのようにデバッグしたのですか?
UITextFieldView
を選択しますUIView
が表示されるはずですが、UIには表示されません。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)
}
}
私にとっては、UITextField
にUIToolbar
を埋め込むことで問題が発生しました。コンテナーを単純なUIView
に置き換えたら、カーソルは再び機能しました。