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을 위해 UITextField와 UITextView다르게 작동합니다. 대한 동안 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.