UI 검색바 검색 텍스트 색상을 변경하려면 어떻게 해야 합니까?
텍스트 색상을 변경하려면 어떻게 해야 합니까?UISearchBar
?
당신은 접속해야 합니다.UITextField
UIS 검색 바 안에 있습니다.를 사용하면 됩니다.valueForKey("searchField")
var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
스위프트 3 업데이트
let textFieldInsideSearchBar = yourSearchbar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
스토리보드에서 UI 검색 표시줄의 텍스트 색상을 설정하려면(코드가 없는) ID 검사기에서도 쉽게 설정할 수 있습니다.여기 검색창 빨간색 텍스트가 있습니다.
어두운 배경에서만 읽을 수 있도록 해야 하는 경우에는 막대 스타일을 변경할 수 있습니다.다음은 검색 표시줄의 텍스트와 단추를 흰색으로 만듭니다.
searchController.searchBar.barStyle = .black
Swift 4에서 일하는 것은 저를 위한 것입니다.
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]
스위프트 4.2, IOS 12:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
public extension UISearchBar {
public func setTextColor(color: UIColor) {
let svs = subviews.flatMap { $0.subviews }
guard let tf = (svs.filter { $0 is UITextField }).first as? UITextField else { return }
tf.textColor = color
}
}
iOS 11, Xcode 9에서 작동합니다.
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.blue
나는 그것을 글로 적습니다.AppDelegate
다른 곳에 갖다 놓으셔도 될 것 같아요.
내가 생각하는 가장 편리한 방법은 a를 설정하는 것입니다.textColor
에 있는 재산.UISearchBar
.
스위프트 3.0
extension UISearchBar {
var textColor:UIColor? {
get {
if let textField = self.value(forKey: "searchField") as?
UITextField {
return textField.textColor
} else {
return nil
}
}
set (newValue) {
if let textField = self.value(forKey: "searchField") as?
UITextField {
textField.textColor = newValue
}
}
}
}
사용.
searchBar.textColor = UIColor.blue // Your color
스위프트 2.3
extension UISearchBar {
var textColor:UIColor? {
get {
if let textField = self.valueForKey("searchField") as? UITextField {
return textField.textColor
} else {
return nil
}
}
set (newValue) {
if let textField = self.valueForKey("searchField") as? UITextField {
textField.textColor = newValue
}
}
}
}
다음과 같이 사용할 수 있습니다.
searchBar.textColor = UIColor.blueColor() // Your color
Xcode 11 및 iOS 13 이후 텍스트 필드에 직접 액세스하는 것이 가능해졌습니다.
searchBar.searchTextField
이런 식으로 항상 접근할 수 있도록 코드를 작성할 수 있습니다.
extension UISearchBar {
public var textField: UITextField? {
if #available(iOS 13.0, *) {
return searchTextField
}
guard let firstSubview = subviews.first else {
assertionFailure("Could not find text field")
return nil
}
for view in firstSubview.subviews {
if let textView = view as? UITextField {
return textView
}
}
assertionFailure("Could not find text field")
return nil
}
}
치명적인 오류로 인해 옵션이 아닌 코드를 만들 수도 있습니다. 이 코드는 iOS 7부터 iOS 13GM까지 테스트되었습니다.하지만 저는 그냥 옵션 버전으로 하겠습니다.
extension UISearchBar {
public var textField: UITextField {
if #available(iOS 13.0, *) {
return searchTextField
}
guard let firstSubview = subviews.first else {
fatalError("Could not find text field")
}
for view in firstSubview.subviews {
if let textView = view as? UITextField {
return textView
}
}
fatalError("Could not find text field")
}
}
이거 먹어봐요.
searchBar.searchTextField.textColor = .white
나는 이것을 iOS 11 이후의 앱에서 사용하고 있습니다.
[업데이트] 관찰했는데, 앱이 이전 버전에서 충돌합니다(< iOS 13). 하지만 컴파일러는 버전 확인에 대해 불평한 적이 없습니다. 누가 왜 이런 일이 일어났는지 설명해주세요.
위에 적힌 몇 가지 해결책을 시도해 보았지만 효과가 없었습니다.
iOS 13만 처리하려면:
mySearchBar.searchTextField.textColor = .red
하지만 오래된 iOS도 처리하고 싶다면 다음과 같이 하십시오.
사용자 정의 만들기UISearchBar
부름을 받는SearchBar : UISearchBar, UISearchBarDelegate
이것.SearchBar
을 가질 것입니다UISearchBarDelegate
내가 다루고 싶은 방법들과 그것들delegate
세트.
그리고 수업에 추가합니다.
var textField: UITextField? {
if #available(iOS 13.0, *) {
return self.searchTextField
}
return subviews.first?.subviews.first(where: { $0 as? UITextField != nil }) as? UITextField
}
간단한 설명:
이제 iOS13을 사용하면UITextField
덕분에.UISearchBar.searchTextField
, 유형의UISearchTextField
, 에서 물려받은.UITextField
.
나의 계급을 알기 때문에, 나는 나의 계급을 압니다.textField
없을 것입니다nill
이전 버전의 경우 오늘 9시부터 13시까지 모든 버전을 쉽게 사용자 지정할 수 있는 텍스트 필드를 받습니다.
작동시키는 데 필요한 전체 코드는 다음과 같습니다.
class SearchBar: UISearchBar, UISearchBarDelegate {
var textField: UITextField? {
if #available(iOS 13.0, *) {
return self.searchTextField
}
return subviews.first?.subviews.first(where: { $0 as? UITextField != nil }) as? UITextField
}
override func awakeFromNib() {
super.awakeFromNib()
delegate = self
if let textField = textField {
textField.textColor = .red
textField.clearButtonMode = .whileEditing
textField.returnKeyType = .search
}
}
}
일부 사용자 지정을 설정할 수도 있습니다.SearchBar
에 이 내용을 추가하면 다음과 같습니다.
let searchBar = UISearchBar.appearance(whenContainedInInstancesOf: [SearchBar.self])
searchBar.backgroundImage = UIImage()
searchBar.isTranslucent = false
searchBar.returnKeyType = .search
그런 다음 XIB / Storyboard에 설정하면 단순한 것처럼 처리합니다.UISearchBar
(딜러를 잊지 않은 경우!)
검색 표시줄 안의 UITextField에 액세스하면 배경색, 텍스트색 및 기타 모든 UITextField 속성을 변경할 수 있습니다.
textField에 액세스하려면 다음 확장자를 추가합니다.
extension UISearchBar {
/// Return text field inside a search bar
var textField: UITextField? {
let subViews = subviews.flatMap { $0.subviews }
guard let textField = (subViews.filter { $0 is UITextField }).first as? UITextField else { return nil
}
return textField
}
}
Swift 5.2 & iOS 13.3.1:-
잘 작동합니다.
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
저는 이게 통했어요.
if #available(iOS 13.0, *) {
searchBar.searchTextField.textColor = .white
}
(이 솔루션은 Xcode 10 및 iOS 12에 대해서만 테스트되었습니다.) 검색 표시줄의 텍스트 필드에 액세스할 수 있도록 확장자를 추가합니다.
extension UISearchBar {
var textField: UITextField? {
return subviews.first?.subviews.compactMap { $0 as? UITextField }.first
}
}
그런 다음 이 속성을 사용하여 검색 표시줄의 텍스트 필드의 텍스트 색상을 설정합니다.
let searchBar = UISearchBar()
searchBar.textField?.textColor = UIColor.white // or whichever color you want
// 편집
위의 코드는 iOS 13에서는 작동하지 않습니다. 이를 처리하는 더 나은 방법은 다음을 사용하는 것입니다.
extension UISearchBar {
var textField: UITextField? {
return self.subviews(ofType: UITextField.self).first
}
}
extension UIView {
var recursiveSubviews: [UIView] {
return self.subviews + self.subviews.flatMap { $0.recursiveSubviews }
}
func subviews<T: UIView>(ofType: T.Type) -> [T] {
return self.recursiveSubviews.compactMap { $0 as? T }
}
}
Swift 5에서는 다음과 같은 작업을 수행할 수 있습니다.
yourSearchBar.searchTextField.textColor = .yourColor
이것은 Xamarin 입니다."UITextField 찾기" 접근법의 iOS C# 버전.향후 iOS 보기 계층에서 UITextField가 사라져도 충돌하지 않습니다.
var tf = searchBar.AllSubViews().FirstOrDefault(v => v is UITextField);
if (tf != null)
(tf as UITextField).TextColor = UIColor.White;
public static IEnumerable<UIView> AllSubViews(this UIView view)
{
foreach (var v in view.Subviews)
{
yield return v;
foreach (var sv in v.AllSubViews())
{
yield return sv;
}
}
}
//이 남자를 시도해 보세요.
yourSearchbar.searchTextField.textColor = .white
내 상황에서 해결책은
id appearance = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class, BCRSidebarController.class]];
[appearance setTextColor:[UIColor.whiteColor colorWithAlphaComponent:0.56]];
Obj-C
UITextField *textField = [self.yourSearchbar valueForKey:@"_searchField"];
textField.textColor = [UIColor redColor];
스위프트 4.x
let textField = yourSearchbar.value(forKey: "searchField") as? UITextField
textField?.textColor = UIColor.red
스위프트 5:
searchBar[keyPath: \.searchTextField].textColor = UIColor(...)
색상은 본인이 직접 설정할 수 있습니다.searchBar.searchTextField.textColor보기DidLoad가 작동합니다.
- (void)viewDidLoad {
[super viewDidLoad];
self.searchBar.searchTextField.textColor = [UIColor whiteColor];
}
스위프트 UI, 스위프트 5
인 스위프트UI, 그
init(){
UITextfiled.appearance().textColor = .white
}
안 돼요.하지만 당신은 그냥 사용할 수 있습니다.
.foregroundColor(.white)
검색 가능한 ()의 텍스트 색상을 변경하는 수식어입니다.
NavigationView{} 내부에서 검색 막대의 tintColor도 변경하려면 다음과 같이 하십시오.뷰의 inti() 함수를 시작할 수 있습니다.
init(){
UINavigationBar.appearance().tintColor = .white
}
var body:some View{
NavigationView{
}
}
제 경우에는 네비게이션 바에 UI 검색 컨트롤러의 검색 바가 있습니다.textColor(textColor)는 탐색에 검색 컨트롤러를 항목으로 추가한 후 호출할 때만 작동합니다.
previous code...
navigationItem.searchController = searchController
// Only after the assignment it works
searchController.searchBar.searchTextField.textColor = your color
searchTextField.textUIS 검색 표시줄의 색상 속성을 설정하여 텍스트 색상을 변경합니다.
let searchBar = UISearchBar()
searchBar.searchTextField.textColor = .white
또는 스토리보드의 경우:
@IBOutlet weak var searchBar: UISearchBar!
searchBar.searchTextField.textColor = .white
스위프트 5 X코드 11.4 iOS 13.4
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = .white
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = .systemFont(ofSize: 13)
언급URL : https://stackoverflow.com/questions/28499701/how-can-i-change-the-uisearchbar-search-text-color
'programing' 카테고리의 다른 글
lsb_release: 최신 Ubuntu Docker 컨테이너에 명령을 찾을 수 없습니다. (0) | 2023.10.19 |
---|---|
이미지를 자동으로 잘라내고 가운데로 맞추는 방법 (0) | 2023.10.19 |
ui 부트스트랩 datepicker footer angularjs 제거방법 (0) | 2023.10.19 |
파이썬에서 대용량 XML 문서를 구문 분석하는 가장 빠른 방법은 무엇입니까? (0) | 2023.10.19 |
SQL Server에서 날짜 시간 필터링의 성능을 향상시키는 방법은 무엇입니까? (0) | 2023.10.19 |