programing

UITextView에 커서가 표시되지 않음

newsource 2023. 8. 23. 21:50

UITextView에 커서가 표시되지 않음

깜박이는 커서가 나중에 나타나지 않는 이유를 생각해 낼 수 있습니까?UITextView하위 클래스에 불과한 사용자 지정 컨트롤이 있습니다.UIView그리고 그것은.UITextView커서는 커서가 포커스를 맞출 때 나타나지 않습니다.키보드가 나타나고 입력하는 대로 텍스트가 나타나지만 커서가 없어서 이유를 알 수 없습니다.

무슨 생각 있어요?

사용자 정의 UI 텍스트 보기에서 색조 색상을 변경했을 수 있습니다.색조 색상이 배경색(일반적으로 흰색)과 동일하면 보이지 않는 것으로 나타납니다.

잘못 설정한 것일 수 있습니다.contentSize또는 구성 요소의 프레임이 너무 작아서 보이지 않거나 컨트롤이 화면 밖에 있습니다.시뮬레이터에 들어가십시오.Debug->Color Blended Layers값이 올바르게 설정되었는지 확인합니다.

편집:

새로운 Xcode(Xcode 6에 도입된 것으로 추정됨)를 사용하면 "Debug View Hierarchy(디버그 보기 계층)"를 클릭하여 이러한 문제를 디버그할 수 있습니다(아래쪽 막대의 아이콘 중 하나).

텍스트 필드에 커서가 표시되지만 텍스트 필드의 색조 색상이 기본값으로 설정되어 있기 때문에 색상을 볼 수 없습니다.스토리보드에서 textField를 선택하고 원하는 링크 색상을 선택하기만 하면 됩니다.첨부된 이미지를 참조하십시오.

enter image description here

모든 UI 텍스트 보기의 색조를 변경하고 커서가 다음 빌드에 표시되기 시작했습니다.

간단한 해결 방법은 지연을 도입한 후 다음과 같이 firstResponder를 호출하면 효과가 있는 것 같습니다.

-(void)begin{

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

    [tf becomeFirstResponder];
}

제 경우에는, 제가 전화를 했습니다.becomeFirstResponder순식간에viewDidLoad방법.통화를 로 이동했습니다.viewDidAppear그리고 그것은 저에게 효과가 있었습니다.

나를 위한 일하는 목발:

   DispatchQueue.main.async {
           
      self.textView.becomeFirstResponder()
      self.textView.insertText(" ")
      self.textView.deleteBackward()
 }

나에게, 그 문제는 임베디드에서 발생했습니다.UITextField순식간에UIToolbar일단 내가 컨테이너를 단순하게 교체했을 때.UIView커서가 다시 작동했습니다.

나의 경우 위의 해결책이 작동하지 않았습니다.제 경우의 문제는UIView커서의 역할을 수행합니다.isOpaque로 설정한.false그 때UITableViewCellselectionStyle…과는 전혀 다릅니다none이것은 제가 아직 바닥에 도달하지 못한 경주 조건에서만 발생하는 것 같습니다.

FWI 디버깅 방법은 다음과 같습니다.

  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)
    }
}

저는 tintColor가 아니라 carletRect 메서드를 재정의하여 발생했습니다.이 방법을 제거한 것이 제 경우를 해결했습니다.

open override func caretRect(for position: UITextPosition) -> CGRect {
       return CGRect.zero
   }

저도 같은 문제에 직면했고 주어진 답변을 시도했지만 텍스트 뷰에서 커서를 볼 수 없었습니다.왜냐하면 다른 무언가가 문제를 일으키고 있었기 때문입니다.그래서 여러분 중 일부는 저와 같은 흔치 않은 문제가 있을 수 있습니다. 이것이 여러분에게 도움이 될 것입니다.

커서 표시 문제의 원인이 되는 이 메서드를 재정의했습니다.

override func caretRect(for position: UITextPosition) -> CGRect {
    return .zero
}

그래서 그냥 이 대사들을 댓글로 달았는데 저한테는 잘 통했어요.

언급URL : https://stackoverflow.com/questions/20959331/cursor-not-showing-up-in-uitextview