UI 텍스트 필드의 커서 숨기기
는 사용중다니입을 .UITextFieldUIPickerView그것 때문에inputView사용자가 텍스트 필드를 누르면 선택사항을 선택할 수 있도록 선택기가 호출됩니다.
거의 모든 것이 작동하지만 한 가지 문제가 있습니다. 사용자가 텍스트 필드에 입력하지 않을 것으로 예상되고 키보드가 표시되지 않기 때문에 커서가 활성 상태일 때 텍스트 필드에서 계속 깜박입니다. 이는 보기 흉하고 부적절합니다.나는 이것을 설정함으로써 교묘하게 해결할 수 있다는 것을 압니다.editingNO텍스트 필드 및 해당 필드에 대한 추적 터치 또는 사용자 지정 선택 단추로 대체하고 코드를 통해 선택기를 호출합니다.하지만, 나는 그것을 사용하고 싶습니다.UITextFieldDelegate텍스트 필드의 모든 이벤트 처리 방법 및 텍스트 필드를 단추로 바꾸는 것과 같은 해킹은 이 접근 방식을 허용하지 않습니다.
어떻게 하면 간단히 커서를 숨길 수 있습니까?UITextField대신에?
하위 클래스 UITextField 및 carrectForPosition을(를) 재정의합니다.
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
return CGRectZero;
}
iOS 7을 할 수 있습니다.tintColor = [UIColor clearColor]textField에서 캐럿이 사라집니다.
텍스트 필드의 색조를 지우기만 하면 됩니다.색상
self.textField.tintColor = [UIColor clearColor];
스위프트 3.0
self.textField.tintColor = .clear

또한 선택기 보기에서 텍스트 입력만 수행하도록 사용자가 텍스트를 선택, 복사 또는 붙여넣기를 중지할 수도 있습니다.
- (CGRect) caretRectForPosition:(UITextPosition*) position
{
return CGRectZero;
}
- (NSArray *)selectionRectsForRange:(UITextRange *)range
{
return nil;
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(copy:) || action == @selector(selectAll:) || action == @selector(paste:))
{
returnNO;
}
return [super canPerformAction:action withSender:sender];
}
http://b2cloud.com.au/tutorial/disabling-the-caret-and-text-entry-in-uitextfields/
클래스가 준수하는 프로토콜의 속성을 확인합니다.거의 없습니다! 이것이 바로 객체 지향 프로그래밍의 교훈입니다.
캐럿 숨기기
캐럿을 숨기려면 텍스트 필드의 선택한 텍스트 범위를 0으로 표시합니다.
textField.selectedTextRange = nil; // hides caret
캐럿 숨기기 취소
다음 두 가지 방법으로 캐럿을 숨깁니다.
텍스트 필드의 선택한 텍스트 범위를 문서의 끝으로 설정합니다.
UITextPosition *end = textField.endOfDocument; textField.selectedTextRange = [textField textRangeFromPosition:end toPosition:end];캐럿을 동일한 위치에 유지하려면 먼저 텍스트 필드의 선택한 텍스트 범위를 인스턴스 변수에 저장합니다.
_textFieldSelectedTextRange = textField.selectedTextRange; textField.selectedTextRange = nil; // hides caret그런 다음 캐럿을 숨기려면 텍스트 필드의 선택한 텍스트 범위를 원래의 텍스트 범위로 다시 설정합니다.
textField.selectedTextRange = _textFieldSelectedTextRange; _textFieldLastSelectedTextRange = nil;
넷의 게시물의 스위프트 5 버전
override func caretRect(for position: UITextPosition) -> CGRect {
return .zero
}
override func selectionRects(for range: UITextRange) -> [UITextSelectionRect] {
return []
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return false
}
OP가 제공한 답변은 답변이 계속 증가하는 미답변 질문을 정리하는 데 도움이 되도록 질문 본문에서 복사한 것입니다.
는 또: 서브클래스 입니해을찾니: 하클스다래다다위른.UIButton 이러한 합니다.
- (UIView *)inputView {
return inputView_;
}
- (void)setInputView:(UIView *)anInputView {
if (inputView_ != anInputView) {
[inputView_ release];
inputView_ = [anInputView retain];
}
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
버튼은 , 이제,.UIResponder와 비슷한 행동을 합니다.UITextField그리고 구현은 매우 간단합니다.
색조 색상을 색상 지우기로 설정
textfield.tintColor = [UIColor clearColor];
인터페이스 빌더에서 설정할 수도 있습니다.
만약 여러분이 커서를 숨기고 싶다면, 이것을 쉽게 사용할 수 있습니다!제게 효과가 있었습니다.
[[textField valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"]
OP가 제공한 답변은 답변이 계속 증가하는 미답변 질문을 정리하는 데 도움이 되도록 질문 본문에서 복사한 것입니다.
올바른 솔루션을 가지고 있다고 생각하지만 개선할 수 있다면 환영할 것입니다 :) 글쎄요, 저는 UITextField의 하위 클래스를 만들고 경계에 대한 CGRect를 반환하는 메서드를 재정의했습니다.
-(CGRect)textRectForBounds:(CGRect)bounds {
return CGRectZero;
}
문제는?직사각형이 0이기 때문에 텍스트가 표시되지 않습니다.그러나 UI 레이블을 컨트롤의 하위 보기로 추가하고 setText 메서드를 재정의하여 일반적으로 텍스트를 입력할 때 텍스트 필드 텍스트는 0이고 텍스트를 표시하는 레이블입니다.
- (void)setText:(NSString *)aText {
[super setText:nil];
if (aText == nil) {
textLabel_.text = nil;
}
if (![aText isEqualToString:@""]) {
textLabel_.text = aText;
}
}
이것으로 일은 예상대로 진행됩니다.당신은 그것을 개선할 방법을 알고 있습니까?
커서와 메뉴를 모두 비활성화하려면 다음 두 가지 방법으로 하위 클래스를 사용합니다.
- (CGRect)caretRectForPosition:(UITextPosition *)position {
return CGRectZero;
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
[UIMenuController sharedMenuController].menuVisible = NO;
self.selectedTextRange = nil;
return NO;
}
저는 그저 하위 클래스입니다.UITextField 및오라드이버드를 재정의합니다.layoutSubviews다음과 같이:
- (void)layoutSubviews
{
[super layoutSubviews];
for (UIView *v in self.subviews)
{
if ([[[v class] description] rangeOfString:@"UITextSelectionView"].location != NSNotFound)
{
v.hidden = YES;
}
}
}
이것은 더러운 해킹이며, 미래에 실패할 수도 있습니다(커서가 다시 표시될 것입니다 - 앱이 충돌하지 않을 것입니다). 하지만 작동합니다.
cleaner = less code를 좋아하면 인터페이스 빌더를 사용합니다.
(속성 검사기, 섹션 보기)
제 경우에는 캐럿을 무시하는 것만으로는 충분하지 않았습니다.iOS 15에서는 캐럿이 효과적으로 나타나지 않았지만 선택 핸들이 표시되었습니다.
했습니다.override var canBecomeFirstResponder: Bool { return false }UITextView 하위 클래스에 있습니다.
추가할 수 있습니다.BOOL cursorless의 UITextField연결된 개체를 통해 범주에 포함됩니다.
@interface UITextField (Cursorless)
@property (nonatomic, assign) BOOL cursorless;
@end
그런 다음 방법 스위즐링을 사용하여 스위즐링합니다.caretRectForPosition:사이를 전환하는 방법으로CGRectZero다음을 사용하여 기본값으로 설정합니다.cursorless.
이는 드롭인 범주를 통해 간단한 인터페이스로 이어집니다.이는 다음 파일에서 확인할 수 있습니다.
이 단순한 인터페이스를 사용하여 사용자에게 제공할 수 있습니다.
UITextField 카테고리: https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless.hhttps ://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless.m
방법 스위즐링: https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.h https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.m
언급URL : https://stackoverflow.com/questions/3699727/hide-the-cursor-of-a-uitextfield
'programing' 카테고리의 다른 글
| Excel-VBA에서 파이썬 코드를 호출하는 방법이 있습니까? (0) | 2023.06.24 |
|---|---|
| SQL developer를 사용하여 오라클 DB의 날짜별 레코드 수 및 그룹 수 계산 필요 (0) | 2023.06.19 |
| XMLHTTP와 ServerXMLHTTP의 차이점 (0) | 2023.06.19 |
| Pandas 데이터 프레임에서 만든 Excel 시트에 하이퍼링크를 _http 방법에 추가합니다. (0) | 2023.06.19 |
| Mongo 업데이트 어레이 요소(.NET 드라이버 2.0) (0) | 2023.06.19 |
