আমি কীভাবে লেখার রঙ পরিবর্তন করতে পারি UISearchBar
?
আমি কীভাবে লেখার রঙ পরিবর্তন করতে পারি UISearchBar
?
উত্তর:
আপনাকে UITextField
ইউআইএসকোবারের অভ্যন্তরে প্রবেশ করতে হবে । আপনি এটি ব্যবহার করে করতে পারেনvalueForKey("searchField")
var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
সুইফট 3 আপডেট
let textFieldInsideSearchBar = yourSearchbar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.textColor = yourcolor
searchField
কেভিসির মাধ্যমে অ্যাক্সেসের প্রয়োজন হবে না ।
আমার জন্য সুইফট 4 এ কাজ করা:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]
সুইফট 4.2, আইওএস 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
}
}
এটি আইওএস 11, এক্সকোড 9 এ আমার জন্য কাজ করে:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.blue
আমি এটিতে লিখি AppDelegate
তবে আমার ধারণা আপনি এটি অন্য কোথাও রাখলে এটি কার্যকর হয়।
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor blueColor]];
প্রবণতা অনুসারে আপনি এখানে যে appearance(whenContainedInInstancesOf:)
এক্সকোড 11 এবং আইওএস 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
}
}
আপনি মারাত্মক ত্রুটিগুলি সহ এটি alচ্ছিক নাও করতে পারেন, এই কোডটি আইওএস 7 থেকে আইওএস 13 জিএম পর্যন্ত পরীক্ষা করা হয়। তবে আমি কেবল alচ্ছিক সংস্করণে যাব।
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")
}
}
আমার মনে হয় সবচেয়ে সুবিধাজনক উপায় হ'ল কোনও 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
এটা চেষ্টা কর,
searchBar.searchTextField.textColor = .white
আমি এটি iOS 11 এর পরে লক্ষ্যযুক্ত অ্যাপের সাহায্যে ব্যবহার করছি।
[আপডেট] আমি পর্যবেক্ষণ করেছি, অ্যাপটি পুরানো সংস্করণগুলিতে ক্রাশ হয়েছে (<আইওএস 13), তবে সংকলক সংস্করণ চেক সম্পর্কে কখনও অভিযোগ করেনি, কেউ দয়া করে ব্যাখ্যা করুন কেন এটি ঘটেছে।
আপনি সার্চবারের ভিতরে ইউআইটিেক্সটফিল্ডটি অ্যাক্সেস করে এটি করতে পারেন, তারপরে আপনি এর পটভূমির রঙ, পাঠ্যের রঙ এবং অন্যান্য সমস্ত ইউআইটিেক্সটফিল্ড বৈশিষ্ট্য পরিবর্তন করতে পারেন
টেক্সটফিল্ড অ্যাক্সেস করতে নিম্নলিখিত এক্সটেনশন যুক্ত করুন
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
}
}
আমি উপরে লেখা কয়েকটি সমাধান চেষ্টা করেছি কিন্তু সেগুলি কার্যকর হয়নি (আর, আমার ধারণা)।
আপনি যদি কেবল iOS 13 পরিচালনা করতে চান:
mySearchBar.searchTextField.textColor = .red
তবে আপনি যদি পুরানো আইওএসটিও পরিচালনা করতে চান তবে আমি যা করেছি তা এখানে:
একটি কাস্টম তৈরি করুন 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
}
সংক্ষিপ্ত ব্যাখ্যা:
আইওএস 13 এর সাহায্যে, আপনি 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 / স্টোরিবোর্ডে সেট করেছেন এবং আপনি এটিকে পরিচালনা করেন যেন এটি সাধারণ UISearchBar
(যদি আপনি প্রতিনিধিদের ভুলে না যান)।
(এই সমাধানটি কেবল এক্সকোড 10 এবং আইওএস 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
// সম্পাদনা
উপরের কোডটি আইওএস 13 এর জন্য কাজ করে না this এটি হ্যান্ডেল করার একটি আরও ভাল উপায় হ'ল:
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 }
}
}
সুইফ্ট 5.2 এবং আইওএস 13.3.1: -
এটা ভাল কাজ করে।
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
এখানে "সন্ধানের ইউআইটিেক্সটফিল্ড" পদ্ধতির একটি Xamarin.iOS সি # সংস্করণ রয়েছে। ভবিষ্যতে আইওএস ভিউ শ্রেণিবিন্যাসে ইউআইটিেক্সটফিল্ড অদৃশ্য হয়ে গেলে এটি ক্রাশ হবে না।
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;
}
}
}
সুইফট 5:
searchBar[keyPath: \.searchTextField].textColor = UIColor(...)
এটি আমার পক্ষে কাজ করেছে।
if #available(iOS 13.0, *) {
searchBar.searchTextField.textColor = .white
}