UITextField 및 UITextView 커서 / 캐럿 색상 변경


222

난에서 커서의 색상 / 캐럿 변경에 대한 궁금하네요 UITextField(그리고 UITextView아이폰 OS에서 그 같은 대답 경우). OSX 개발에 대한 답변을 보았지만 iOS에 대해서는 아무것도 보지 못했습니다.

이것도 가능합니까?


1
에 대한 자세한 대답 UITextField에, 인터페이스 빌더에서이 작업을 수행하는 방법을 포함하여, stackoverflow.com/a/18759577/1709587
마크 Amery을

1
stackoverflow.com/a/18945907/1292230 ;의 단순하고 완전한 답변 )
RileyE

답변:


512

iOS 7 이상을 타겟팅하는 경우 훨씬 쉬워졌습니다. tintColor모양 프록시를 사용하여 커서로 필드의 필드를 변경 하면 앱 전체에 적용됩니다.

스위프트 3.0 :

UITextField.appearance().tintColor = .black 

목표 -C :

[[UITextField appearance] setTintColor:[UIColor blackColor]];

개인에게도 동일한 답변이 적용됩니다 UITextField.

스위프트 3.0 :

myTextField.tintColor = .black 

목표 -C

[myTextField setTintColor:[UIColor blackColor]];

13
색조 색상을 완전히 다른 것으로 설정하더라도 UIBarButton 항목 색조 색상이 기본값으로 고정됩니다. UITextField를 만들 때 색조 색상을 개별적으로 설정하여 문제를 해결했습니다.
willtalmadge

이것은 작동하지만 didFinishLaunching에서 수행하는 경우에만 가능합니다. 또는 버튼을 누르는 등의 사용자 상호 작용을 기반으로 할 수 있습니까?
Steffen Andersen

@SteffenAndersen은 UIAppearance 프록시 API 설명서에 따라 작동해야합니다.
DiscDev

[[UITextView 모양] setTintColor : teal]; 어떤 이유로 이것은 내 탐색 표시 줄의 색상을 변경합니다. 어떻게 개별적으로 설정 했습니까?
John

3
스위프트 3.0 사용이 : UITextField.appearance ()하려면 tintColor = UIColor.black.
루카스 Torquato

44

iOS7을 사용하면 텍스트 필드의 tintColor를 간단하게 변경할 수 있습니다


20

스위프트 3 :

  UITextField.appearance().tintColor = UIColor.black
  UITextView.appearance().tintColor = UIColor.black

1
스위프트 3.0 사용이 : UITextField.appearance ()하려면 tintColor = UIColor.black.
루카스 Torquato

13

참고 :이 답변은 최신 정보가 아니며 iOS 7 이전 개발에만 사용해야합니다. iOS 7에서 모양 프록시를 사용하는 한 줄 솔루션에 대한 다른 답변을 참조하십시오.

내가 작업중 인 프로젝트에서 동일한 문제에 직면 한 후이 질문에 도달했습니다.

기존 개인 API를 사용하지 않기 때문에 AppStore 검토 팀이 승인 할 솔루션을 만들었습니다.

UITextField를 확장하는 DGTextField라는 컨트롤을 만들었습니다.


대단하다. 솔직히 말해서, 나는 문서의 "적합한"에 대해 자세히 살펴볼 것입니다. 그러나 한 사람 만이 이것에 대해 읽고 땜질하는 데 시간을 보내서 기뻤습니다. 다른 사람들이 이것을보고 사용할 수 있기를 바랍니다.
RileyE

그러나 애니메이션 옵션을 권장하여 @propery를 제거하고 사용자 정의 캐럿 너비에 대한 setter 및 getter뿐만 아니라 setter 및 getter를 만듭니다. 당신은 관심이 없을 수도 있지만, 나는 항상 약간의 조정을 좋아합니다!
RileyE

@RileyE 내 솔루션의 혜택을 누리게되어 기쁩니다. 레포를 포크하고 공유하고 싶은 부분을 추가하십시오.
Dov

3
iOS 7에서는 훨씬 쉽습니다. 아래 답변을 참조하십시오 : stackoverflow.com/a/18945907/1103584
DiscDev

12
yourTextField.tintColor = [UIColor whiteColor];

코드에서 설정하면 작동합니다 .'cos 어떻게 든 색상 트리거가 Interface Builder (Xcode 6.1.1) 에서 작동하지 않습니다 . 외관 프록시를 변경할 필요없이 적합합니다.


2
알 수없는 이유로 whiteColor에서는 작동하지 않지만 다른 모든 색상에서는 작동합니다 (iOS 8에서 테스트). 거의 흰색이지만 작동하지 않도록 흰색을 설정해야했습니다.
Leszek Szary

트윗 담아 가기 당신은 내 하루를 구했다! 나는 거의 4 시간 동안 노력했고 당신의 말은 단서였습니다! 애플은이 미친 버그를 수정하여 개발자를 미치게한다.
Karthick Ramesh

10

설정 tintColor을 위해 UITextFieldUITextView다르게 작동합니다. 대한 동안 UITextField당신이 업데이트 후 추가 코드를 호출 할 필요가 없습니다 tintColor에 대한 변경 커서 색상,하지만 UITextView당신은 필요가 없다.

그래서 설정 후 tintColor를 위해 UITextView(이 코드 IB 나에 중요하지 않습니다) 당신이 호출 할 필요 textView.tintColorDidChange()적용하기 위해 (실제로는 하위 뷰 계층 구조 아래로 텍스트 뷰의 설정을 전달합니다).


5

이것은 신속하게 나를 위해 일했습니다.

UITextField.tintColor = UIColor.blackColor()

스토리 보드에서 이것을 설정할 수도 있습니다 : https://stackoverflow.com/a/18759577/3075340


작동하지 않습니다. 오류가 발생했습니다 :Instance member 'tintcolor' cannot be used on type 'UITextField'
pableiros

@pableiros 위의 내용은 Swift 2입니다. Swift 3를 사용하고 계십니까?
마이크로

내가 스위프트 3 스위프트 2.3에 시도, 나는 스위프트 2.2 있는지 확실하지 않습니다 및 작동 낮은
pableiros

3

보다 일반적인 접근 방식은 UIView의 모양을 tintColor로 설정하는 것입니다.

UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];

많은 기본 UI 요소를 사용하는 경우 이치에 맞습니다.


2
흠 ... 이것은 다른 부작용이 많이 있습니다 ... 질문은 캐럿 색상 변경에 대해서만 묻는 것입니다. 응답은 응용 프로그램의 모든 단일 UIView를 색조로 지정합니다 ... 아마도 대부분의 사람들이 원하는 접근법은 아닙니다 가지다.
DiscDev

캐럿 색상을 변경하는 것이 목표라면 부작용이 너무 많아 +1합니다. UIView tintColor 설정은 컨테이너의 스타일을 지정할 때 유용합니다 (그러나 사용하지 않을 것입니다[UIView appearance]
colinta

2

시도해보십시오.

[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];

6
그것은 개인적인 방법을 사용하고 있지만 제안 해 주셔서 감사합니다. 이를 통해 응용 프로그램을 쉽게 거부 할 수 있습니다.
RileyE 2016 년


0

Durgesh의 접근 방식이 효과가 있습니다.

또한 이러한 KVC 솔루션을 여러 번 사용했습니다. 비록 문서화되지 않은 것처럼 보이지만 작동합니다. 솔직히, 당신은 어떤 개인적인 방법도 사용하지 않습니다-합법적 인 키-값 코딩 만.

추신 어제이 새로운 접근 방식으로 AppStore에 새로운 앱이 나타났습니다. 그리고 navigatonBar와 같은 일부 읽기 전용 속성이나 개인 ivar를 변경하는 데 KVC를 사용하는 경우는 처음이 아닙니다.


1
개인 방법을 사용하지 않고 키가 문서화되어 있지 않으므로 App Store의 응용 프로그램에 사용되지 않습니다. 신청서가 주관적으로 거부 될 수 있습니다. 많은 사람들이 그 방법을 사용하여 거부되었으므로 친절한 검토자가 있었을 것입니다.
RileyE

그런 다음 약 10 종류의 리뷰어가 있습니다 :) 및 많은 동료들도 있습니다.
malex

1
명확히하기 위해이 경우 "키-값 코딩"은 편의 방법을 사용하여 속성에 값을 할당합니다. 우리가 setter와 비교하여 그것을 사용하는 이유는 속성에 액세스 할 수 없거나 숨겨져 있거나 개인이기 때문입니다.
RileyE

1
여기서 KVC에 대한 문서가 문자 그대로 제한을 의미하지 않는다는 것을 의미합니다 (중요한 것을 모를 수도 있습니다). 그래서 나는이 모든 것을 성공적으로 사용합니다. 그리고 희망적으로 다른 사람들도 할 수 있습니다.
malex

1
감사합니다. 그러나 Apple의 '이용 약관'에 문서에 포함 된 내용을 사용하고 공개적으로 논의 할 수 있으며 문서화되지 않은 방법의 사용을 금지한다고 명시되어 있습니다 (KVC를 통한 'textInputTraits'설정자 액세스는 속성은 문서화되지 않았습니다). 기본적으로 문서에서 방법을 찾을 수 없으면 금지되어 있습니다. 그러나 금지는 거부를 보장하지 않습니다. 스토어에 만드는 일부 앱에 포함 된 이유로 일부 애플리케이션이 거부되었습니다. 문서화되지 않은 방법으로 인기를 얻었습니다.
RileyE

0

Swift가 포함 된 Interface Builder 버전

@IBOutlet weak var tvValue: UITextView! {
        didSet {
            tvValue.tintColor = .black
        }
    }

0

(가) 경우 UITextField에서입니다 UISearchBar후 먼저 얻을 textField에서 searchBar다음 적용 tintColor속성을 :

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray

0

스위프트 4

viewDidLoad ()에서 아래 코드를 호출하십시오.

코드 샘플

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()

0

나는 당신이 Assets.xcassets폴더에 갈 수있는 사용자 정의 색상을 원한다면 마우스 오른쪽 버튼을 클릭하고을 선택하십시오 New Color Set. 설정 한 색상을 만들면 재사용 할 이름을 지정하십시오.

그리고 당신은 이것을 다음과 같이 사용할 수 있습니다 :

import UIKit 

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME")  #here
    }
}

macOS 10.15 / iOS 13 / Swift 5에서 테스트


0

대한 SwiftUI에 해당하는 검색 사람들을 위해 Textfield이것이다 accentColor:

TextField("Label", text: $self.textToBind).accentColor(Color.red)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.