wake-up-neo.net

Der Cursor wird in UITextView nicht angezeigt

Kann sich jemand einen Grund vorstellen, dass der blinkende Cursor nicht in einer UITextView angezeigt wird? Ich habe ein benutzerdefiniertes Steuerelement, das nur eine Unterklasse von UIView ist und eine UITextView enthält. Der Cursor erscheint jedoch nicht, wenn er den Fokus erhält. Die Tastatur wird angezeigt, und der Text wird bei der Eingabe angezeigt, aber es gibt keinen Cursor, und ich kann nicht herausfinden, warum.

Irgendwelche Gedanken? ...

60
SeanT

Sie haben möglicherweise die Tönungsfarbe in Ihrem benutzerdefinierten UITextView geändert. Wenn die Farbtonfarbe der Hintergrundfarbe entspricht (normalerweise weiß), erscheint sie unsichtbar.

188
lehn0058

Möglicherweise haben Sie eine contentSize und/oder einen Frame für die Komponente falsch eingestellt, sodass sie zu klein ist, um sichtbar zu sein oder das Steuerelement außerhalb des Bildschirms ist. Gehen Sie in Simulator zu Debug->Color Blended Layers, um zu sehen, ob diese Werte richtig eingestellt sind.

BEARBEITEN:

Mit neuen Xcodes (wahrscheinlich in Xcode 6 eingeführt) können Sie diese Art von Problemen debuggen, indem Sie auf "Debug View Hierarchy" klicken (dies ist eines der Symbole in der unteren Leiste).

5
Julian Król

Ich habe den Farbton aller meiner UITextViews geändert und der Cursor wurde beim nächsten Build angezeigt.

2
Andy Bernard

Das Textfeld zeigt den Cursor, aber Sie können die Farbe nicht sehen, nur weil die Farbtonfarbe Ihres Textfelds höchstwahrscheinlich auf Standard gesetzt ist, da es in meinem Fall .. war. Wählen Sie einfach textField im Storyboard aus und wählen Sie das aus Linkfarbe Ihres Wunsches. Siehe das angefügte Bild.

 enter image description here

2
Kunal Gupta

In meinem Fall habe ich becomeFirstResponder in einer viewDidLoad-Methode aufgerufen. Ich verlegte den Anruf in viewDidAppear und es funktionierte für mich.

1
Vladimir Vlasov

Die einfache Problemumgehung scheint zu funktionieren, indem eine Verzögerung eingeführt und dann firstResponder aufgerufen wird:

-(void)begin{

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

    [tf becomeFirstResponder];
}
1
Johnny Rockex

Die obige Lösung hat in meinem Fall nicht funktioniert. Das Problem in meinem Fall ist, dass UIView, das als Cursor fungiert, isOpaque auf false gesetzt ist, wenn UITableViewCells selectionStyle alles außer none ist. Dies scheint nur unter einer Rennsituation zu passieren, bei der ich noch nicht auf den Grund gegangen bin. 

FWIW hier habe ich das debuggt:

  1. wähle deine UITextFieldView
  2. Öffnen Sie die Debug-Ansichtshierarchie. Sie sollten UIView sehen, das den Cursor an der richtigen Position darstellen würde, aber er erscheint nicht in der Benutzeroberfläche.
  3. klicken Sie mit der rechten Maustaste auf UIView des Cursors und wählen Sie "Beschreibung drucken ...". Die Beschreibung zeigt OPAQUE=NO

Leider ist die UITextSelectionView-Klasse, die diese UIView besitzt, privat und daher gibt es keine unkomplizierte Möglichkeit, isOpaque programmgesteuert zu aktualisieren.

Dies scheint nicht bei jeder Implementierung ein Problem zu sein, hier ist jedoch die Beziehung zwischen meinen Ansichten. 

Mein Textansicht-Delegierter

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
    }

und mein Tischdelegierter:

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

Für mich wurde das Problem durch das Einbetten einer UITextField in eine UIToolbar verursacht. Nachdem ich den Container für eine einfache UIView ausgetauscht hatte, funktionierte der Cursor erneut.

0
FD_