আমি কীভাবে ইউআইএসবারবার অনুসন্ধানের পাঠ্যের রঙ পরিবর্তন করতে পারি?


উত্তর:


108

আপনাকে 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

4
আমি আমার উত্তর সম্পাদনা করেছি। আপনি ভ্যালুফোর্কি ("সার্চফিল্ড") ব্যবহার করে এই ক্ষেত্রটি অ্যাক্সেস করতে পারেন
খ্রিস্টান

7
এটি ব্যক্তিগত এপিআই নয় তবে এটি খুব ভঙ্গুর এবং কোনও আইওএস আপডেট আপডেট করতে পারে update প্রোডাকশন কোডে আপনার মতো জিনিসগুলি ব্যবহার করা উচিত নয়
লোপ

4
@ ক্রিশ্চিয়ান - আসল উত্তরটি কখন পোস্ট করা হয়েছিল তাতে কিছু যায় আসে না, এটি এখনও ব্যক্তিগত এপিআইতে নির্ভর করে। যদি এটি সর্বজনীন হয়, আপনার searchFieldকেভিসির মাধ্যমে অ্যাক্সেসের প্রয়োজন হবে না ।
গ্রেগ ব্রাউন

4
ডাউনভোট অ্যাপল কর্তৃক অনুমোদিত আরও শক্তিশালী পদ্ধতির জন্য @ জুয়ানজোর উত্তর এবং আমার মন্তব্য দেখুন এবং খুব কম ভাঙ্গার সম্ভাবনা রয়েছে।
রবপি

4
এই উত্তরটি ব্যবহার করবেন না, আপনি ব্যক্তিগত API গুলি অ্যাক্সেস করছেন এবং এটি আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করতে পারে।
aryaxt

64

আপনি যদি স্টোরিবোর্ডে (কোডবিহীন) ইউআইএসইচবারের জন্য পাঠ্য রঙ সেট করতে চান তবে এটিও করা সহজ (পরিচয় পরিদর্শক)। অনুসন্ধান বারের জন্য এখানে একটি লাল পাঠ্য রয়েছে।

এখানে চিত্র বর্ণনা লিখুন


4
দেখার উপাদানগুলির জন্য কম কোড থাকা ভাল। ধন্যবাদ
এনআরআর

নিখুঁত সমাধান!
মোনা

50

আমার জন্য সুইফট 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]

আমার জন্য কাজ করছি।
সুরজিৎ রাজপুত

এবং এটি মডিউলটিতে প্রতিটি অনুসন্ধানবারের জন্য রঙ পরিবর্তন করে?
জাপোরোজচেনকো ওলেকসান্দ্র

48

যদি আপনি কেবল অন্ধকার পটভূমিতে এটি পঠনযোগ্য করতে চান তবে আপনি বারস্টাইল পরিবর্তন করতে পারেন। নিম্নলিখিতটি অনুসন্ধান বারে পাঠ্য এবং বোতামগুলি সাদা করে তোলে:

searchController.searchBar.barStyle = .black

@ বেকন, এটিও সাহায্য করেছিল! ধন্যবাদ
গোপীনাথ

32
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
    }
}

আপনার মত সমাধান। ধন্যবাদ
বাগসফ্লায়ার

বার আভা থেকে পৃথক করে পাঠ্য ক্ষেত্রের পটভূমির রঙ নিয়ন্ত্রণ করতে আপনি "অনুসন্ধানফিল্ড.ব্যাকগ্রাউন্ড কালার" যুক্ত করতে পারেন।
শেরউইন জাদেহ

14

এটি আইওএস 11, এক্সকোড 9 এ আমার জন্য কাজ করে:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.blue

আমি এটিতে লিখি AppDelegateতবে আমার ধারণা আপনি এটি অন্য কোথাও রাখলে এটি কার্যকর হয়।


4
এটি গ্রহণযোগ্য উত্তর এবং অন্যান্য উত্তরের মূল-মানহীন বোকামির চেয়ে অনেক বেশি শক্তিশালী পদ্ধতির। যাইহোক, অ্যাপল তাদের জ্ঞানের [[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor blueColor]];প্রবণতা অনুসারে আপনি এখানে যে appearance(whenContainedInInstancesOf:)
এআইপি

4
কোনও আসল ডিভাইসে Xcode 10, iOS 12, এ আমার জন্য কাজ করছে বলে মনে হচ্ছে না।
ওডে

11

এক্সকোড 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")
    }
}

অবশেষে! আমরা সরাসরি পাঠ্য ক্ষেত্রটি অ্যাক্সেস করতে পারি। ধন্যবাদ, সারেন
মার্ক Moeykens

10

আমার মনে হয় সবচেয়ে সুবিধাজনক উপায় হ'ল কোনও 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

আমার জন্য কাজ না। আপনি কখন পাঠ্য রঙের সম্পত্তি সেট করবেন?
কিংয়ালিয়ন

4
@ কিঙ্গালিয়োন আপনি এটিকে 'ভিউডিডডলড ()'
তাল জিয়োন

হ্যাঁ, আমি প্ল্যাচোল্ডার পাঠ্যের রঙ পরিবর্তন করতে চেয়েছিলাম। এখন আমি সমাধানগুলি খুঁজে পেয়েছি। যাইহোক ধন্যবাদ
কিংয়ালিয়ন

4

এটা চেষ্টা কর,

searchBar.searchTextField.textColor = .white

আমি এটি iOS 11 এর পরে লক্ষ্যযুক্ত অ্যাপের সাহায্যে ব্যবহার করছি।

[আপডেট] আমি পর্যবেক্ষণ করেছি, অ্যাপটি পুরানো সংস্করণগুলিতে ক্রাশ হয়েছে (<আইওএস 13), তবে সংকলক সংস্করণ চেক সম্পর্কে কখনও অভিযোগ করেনি, কেউ দয়া করে ব্যাখ্যা করুন কেন এটি ঘটেছে।


3

আপনি সার্চবারের ভিতরে ইউআইটিেক্সটফিল্ডটি অ্যাক্সেস করে এটি করতে পারেন, তারপরে আপনি এর পটভূমির রঙ, পাঠ্যের রঙ এবং অন্যান্য সমস্ত ইউআইটিেক্সটফিল্ড বৈশিষ্ট্য পরিবর্তন করতে পারেন

টেক্সটফিল্ড অ্যাক্সেস করতে নিম্নলিখিত এক্সটেনশন যুক্ত করুন

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
    }
}

3

আমি উপরে লেখা কয়েকটি সমাধান চেষ্টা করেছি কিন্তু সেগুলি কার্যকর হয়নি (আর, আমার ধারণা)।

আপনি যদি কেবল 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(যদি আপনি প্রতিনিধিদের ভুলে না যান)।


2

(এই সমাধানটি কেবল এক্সকোড 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 }
    }
}

আইওএস 13 রিটার্ন সাবভিউ.ফার্ট? .সুবভিউস.লাস্ট? UITextField} .last
Taras


2

সুইফ্ট 5.2 এবং আইওএস 13.3.1: -

এটা ভাল কাজ করে।

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]


1

এখানে "সন্ধানের ইউআইটিেক্সটফিল্ড" পদ্ধতির একটি 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;
        }
    }
}

0

আমার পরিস্থিতি সমাধান হয়

id appearance = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class, BCRSidebarController.class]];
[appearance setTextColor:[UIColor.whiteColor colorWithAlphaComponent:0.56]];

0

ওবজ-সি

UITextField *textField = [self.yourSearchbar valueForKey:@"_searchField"];
textField.textColor = [UIColor redColor];

সুইফট 4.x

let textField = yourSearchbar.value(forKey: "searchField") as? UITextField
textField?.textColor = UIColor.red


0

সুইফট 5 এ আপনি নীচের মতো কিছু করতে পারেন:

yourSearchBar.searchTextField.textColor = .yourColor


-1

সুইফ্ট 5 এক্সকোড 11.4 আইওএস 13.4

    UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = .white
    UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = .systemFont(ofSize: 13)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.