programing tip

UITextView에 커서가 표시되지 않음

itbloger 2020. 11. 16. 07:54
반응형

UITextView에 커서가 표시되지 않음


깜박이는 커서가 표시되지 않는 이유를 누구나 생각할 수 있습니까 UITextView? 하위 클래스 인 사용자 지정 컨트롤이 UIView있고 여기에 포함되어 UITextView있지만 포커스를받을 때 커서가 나타나지 않습니다. 키보드가 나타나고 입력하는 동안 텍스트가 나타나지만 커서가 없어 그 이유를 알 수 없습니다.

이견있는 사람?...


사용자 정의 UITextView에서 색조 색상을 변경했을 수 있습니다. 색조 색상이 배경색 (일반적으로 흰색)과 같으면 보이지 않게 나타납니다.


contentSize구성 요소에 대해 및 / 또는 프레임을 잘못 설정 하여 표시하기에는 너무 작거나 컨트롤이 화면 밖에있을 수 있습니다. Debug->Color Blended Layers해당 값이 올바르게 설정되었는지 확인하려면 시뮬레이터로 이동하십시오.

편집하다:

새로운 Xcode (아마 Xcode 6에 도입되었을 가능성이 있음)를 사용하면 "Debug View Hierarchy"(하단 막대에있는 아이콘 중 하나)를 클릭하여 이러한 종류의 문제를 디버깅 할 수 있습니다.


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

여기에 이미지 설명 입력


모든 UITextView의 색조 색상을 변경하고 커서가 다음 빌드에 표시되기 시작했습니다.


간단한 해결 방법은 다음과 같이 지연을 도입 한 다음 firstResponder를 호출하여 작동하는 것 같습니다.

-(void)begin{

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

    [tf becomeFirstResponder];
}

제 경우 becomeFirstResponder에는 viewDidLoad메서드를 호출 했습니다 . 나는 전화를로 옮겼고 viewDidAppear그것은 나를 위해 일했습니다.


나를 위해, 문제는 임베딩에 의해 발생 된 UITextFieldA의 UIToolbar. 컨테이너를 간단한으로 교체 UIView하면 커서가 다시 작동했습니다.


위의 솔루션은 제 경우에는 작동하지 않았습니다. 내 경우에 문제 UIView는 커서 역할을하는 것이 가 아닌 경우로 isOpaque설정 되었다는 입니다. 이것은 내가 아직 바닥에 도달하지 않은 경쟁 조건에서만 발생하는 것 같습니다.falseUITableViewCellselectionStylenone

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

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

반응형