Tôi đang tự hỏi về việc thay đổi màu sắc của con trỏ / dấu mũ trong một UITextField
(Và UITextView
nếu đó là cùng một câu trả lời) trong iOS. Tôi đã thấy câu trả lời cho sự phát triển OSX, nhưng không có gì cho iOS.
Điều này thậm chí có thể?
Tôi đang tự hỏi về việc thay đổi màu sắc của con trỏ / dấu mũ trong một UITextField
(Và UITextView
nếu đó là cùng một câu trả lời) trong iOS. Tôi đã thấy câu trả lời cho sự phát triển OSX, nhưng không có gì cho iOS.
Điều này thậm chí có thể?
Câu trả lời:
Nếu bạn đang nhắm mục tiêu iOS 7+, việc này đã được thực hiện dễ dàng hơn nhiều. Chỉ cần thay đổi tintColor
trường bằng một con trỏ bằng proxy xuất hiện và nó sẽ được áp dụng trong toàn bộ ứng dụng:
Swift 3.0:
UITextField.appearance().tintColor = .black
Mục tiêu-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
Câu trả lời tương tự áp dụng cho một cá nhân UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Mục tiêu-C
[myTextField setTintColor:[UIColor blackColor]];
Với iOS7, bạn chỉ cần thay đổi tintColor của textField
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
Lưu ý: Câu trả lời này đã hết hạn và chỉ nên được sử dụng cho phát triển trước iOS 7. Xem các câu trả lời khác cho giải pháp 1 dòng bằng proxy xuất hiện trong iOS 7.
Tôi đã đến câu hỏi này sau khi tôi gặp phải vấn đề tương tự trong một dự án mà tôi đang thực hiện.
Tôi đã quản lý để tạo một giải pháp sẽ được nhóm đánh giá AppStore chấp nhận vì nó không sử dụng bất kỳ API riêng tư hiện có nào.
Tôi đã tạo một điều khiển có tên DGTextField mở rộng UITextField.
yourTextField.tintColor = [UIColor whiteColor];
Nó hoạt động nếu bạn đặt mã, 'bằng cách nào đó, trình kích hoạt màu không thực hiện được trong Trình tạo giao diện (Xcode 6.1.1). Nó rất phù hợp mà không cần phải thay đổi bất kỳ proxy xuất hiện.
Thiết tintColor
cho UITextField
và UITextView
công trình khác nhau. Mặc dù đối với UITextField
bạn không cần gọi thêm mã sau khi cập nhật tintColor
để thay đổi màu con trỏ, nhưng đối với UITextView
bạn cần.
Vì vậy, sau khi cài đặt tintColor
cho UITextView
(nó không quan trọng trong IB hoặc trong mã), bạn cần phải gọi textView.tintColorDidChange()
để áp dụng nó (trên thực tế nó sẽ vượt qua cấu hình xem văn bản của hệ thống phân cấp xuống subviews của nó).
Điều này làm việc cho tôi nhanh chóng:
UITextField.tintColor = UIColor.blackColor()
Bạn cũng có thể thiết lập điều này trong bảng phân cảnh: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Một cách tiếp cận tổng quát hơn sẽ là thiết lập tintColor của UIView.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Có ý nghĩa nếu bạn đang sử dụng nhiều yếu tố UI mặc định.
[UIView appearance]
Hãy thử, nó làm việc cho tôi.
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
Chỉ có thể bằng cách truy cập một tài sản riêng và do đó có thể gây ra sự từ chối ứng dụng Apple AppStore.
Cách tiếp cận của Durgesh không hoạt động.
Tôi cũng đã sử dụng các giải pháp KVC như vậy nhiều lần. Mặc dù nó dường như không có giấy tờ, nhưng nó hoạt động. Thành thật mà nói, bạn không sử dụng bất kỳ phương pháp riêng tư nào ở đây - chỉ Mã hóa giá trị khóa là hợp pháp.
PS Hôm qua, ứng dụng mới của tôi đã xuất hiện tại AppStore mà không gặp vấn đề gì với phương pháp này. Và đó không phải là trường hợp đầu tiên khi tôi sử dụng KVC trong việc thay đổi một số thuộc tính chỉ đọc (như navigatonBar) hoặc ivars riêng.
Dành cho phiên bản Trình tạo giao diện với Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Nếu UITextField
là từ UISearchBar
trước thì lấy textField
từ searchBar
và sau đó áp dụng thuộc tintColor
tính:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Tôi nghĩ rằng nếu bạn muốn một số màu tùy chỉnh, bạn có thể vào Assets.xcassets
thư mục, nhấp chuột phải và chọnNew Color Set
, sau khi bạn tạo màu bạn đã đặt, hãy đặt tên cho nó để sử dụng lại.
Và bạn có thể sử dụng nó như thế này:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
Đã thử nghiệm trên macOS 10.15 / iOS 13 / Swift 5
UITextField
, bao gồm cách thực hiện việc này trong Trình tạo giao diện, tại stackoverflow.com/a/18759577/1709587