it-swarm.com.ru

Курсор не отображается в UITextView

Может кто-нибудь придумать причину, по которой мигающий курсор не будет отображаться в UITextView? У меня есть пользовательский элемент управления, который является просто подклассом UIView, и в нем есть UITextView, но курсор не появляется, когда он получает фокус. Появляется клавиатура, и текст появляется при вводе текста, но курсора нет, и я не могу понять, почему.

Какие-нибудь мысли?...

60
SeanT

Возможно, вы изменили цвет оттенка в вашем пользовательском UITextView. Если цвет оттенка такой же, как цвет фона (обычно белый), он будет отображаться невидимым.

188
lehn0058

Возможно, вы неправильно установили contentSize и/или рамку для компонента, поэтому он слишком мал, чтобы быть видимым, или элемент управления находится вне экрана. Пожалуйста, перейдите в Simulator к Debug->Color Blended Layers, чтобы увидеть, правильно ли установлены эти значения.

Правка:

С новыми X-кодами (возможно, представленными в X-Code 6) вы можете отлаживать такого рода проблемы, нажимая «Debug View Hierarchy» (это один из значков на нижней панели)

5
Julian Król

Я изменил цвет оттенка всех моих UITextViews, и курсор начал показываться при следующей сборке.

2
Andy Bernard

Текстовое поле показывает курсор, но вы не можете видеть цвет, просто потому, что цвет оттенка вашего текстового поля установлен по умолчанию наиболее вероятно, как в моем случае, это было ... цвет ссылки вашего желания. Обратитесь к приложенному изображению.

 enter image description here

2
Kunal Gupta

В моем случае я вызвал 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

Решение выше не сработало в моем случае. Проблема в моем случае заключается в том, что UIView, который действует как курсор, имеет isOpaque, установленный в false, когда UITableViewCell's selectionStyle совсем не none. Это, кажется, происходит только в условиях гонки, в которых я еще не дошел до сути. 

Вот как я отлаживал это:

  1. выберите UITextFieldView
  2. откройте иерархию просмотра отладки. Вы должны увидеть UIView, который будет представлять курсор в правильной позиции, но он не появится в пользовательском интерфейсе.
  3. щелкните правой кнопкой мыши курсор UIView и выберите «Print Description ...». Описание указывает 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

Для меня проблема была вызвана встраиванием UITextField в UIToolbar. Как только я заменил контейнер на простой UIView, курсор снова заработал.

0
FD_