UITextField और UITextView Cursor / Caret Color बदलें


222

IOS में कर्सर / कैरेट का रंग बदलने के बारे में सोच रहा हूं UITextField(और UITextViewयदि इसका वही उत्तर है)। मैंने OSX विकास के लिए उत्तर देखे हैं, लेकिन iOS के लिए कुछ भी नहीं।

क्या यह भी संभव है?


1
UITextFieldइंटरफ़ेस बिल्डर में इसे कैसे करना है, इसके विस्तृत विवरण , stackoverflow.com/a/18759577/1709587 पर
मार्क एमी

1
सरल और पर पूरा जवाब stackoverflow.com/a/18945907/1292230 ;)
RileyE

जवाबों:


513

यदि आप iOS 7+ को लक्षित कर रहे हैं, तो इसे बहुत आसान बना दिया गया है। बस tintColorउपस्थिति प्रॉक्सी का उपयोग करके कर्सर के साथ क्षेत्र को बदलें और यह पूरे ऐप पर लागू होगा:

स्विफ्ट 3.0:

UITextField.appearance().tintColor = .black 

उद्देश्य सी:

[[UITextField appearance] setTintColor:[UIColor blackColor]];

एक व्यक्ति के लिए एक ही उत्तर लागू होता है UITextField:

स्विफ्ट 3.0:

myTextField.tintColor = .black 

उद्देश्य सी

[myTextField setTintColor:[UIColor blackColor]];

13
मैंने पाया कि मेरे UIBarButton आइटम टिंट रंग उनके डिफ़ॉल्ट मानों के लिए निश्चित हो गए हैं, भले ही मैं टिंट रंग को पूरी तरह से कुछ अलग करने के लिए सेट कर दूं। मैंने व्यक्तिगत रूप से UITextFields के टिंट रंग सेट करके समस्या को हल किया जब वे बनाए जाते हैं।
सम्‍मानित होगा

यह काम करता है, लेकिन केवल अगर आप इसे किया करते हैंफिनिश लंच? या क्या आप इसे उपयोगकर्ता सहभागिता के आधार पर कर सकते हैं, उदाहरण के लिए एक बटन दबाएं?
स्टीफन एंडरसन

@SteffenAndersen इसे UIAppearance प्रॉक्सी API डॉक्यूमेंट के अनुसार व्यवहार करना चाहिए।
डिस्कडेव

[[UITextView उपस्थिति] setTintColor: teal]; किसी कारण से यह मेरे नेबरबटन के रंग को बदल देता है, आपने अविभाज्य रूप से कैसे सेट किया?
जॉन

3
स्विफ्ट 3.0 पर इसका इस्तेमाल करें: UITextField.appearance ()। TintColor = UIColor.black
Lucas Torquato

44

IOS7 के साथ आप केवल टेक्स्टफिल्ड के टिंटकलर को बदल सकते हैं



13

नोट: यह उत्तर पुराना है और केवल पूर्व iOS 7 विकास के लिए उपयोग किया जाना चाहिए। IOS 7 में उपस्थिति प्रॉक्सी का उपयोग करके 1 लाइन समाधान के लिए अन्य उत्तर देखें।

जब मैं जिस परियोजना में काम कर रहा था, उसी समस्या का सामना करने के बाद मैं इस सवाल पर आया था।

मैं एक समाधान बनाने में कामयाब रहा जिसे AppStore की समीक्षा टीम द्वारा स्वीकार किया जाएगा क्योंकि यह किसी भी मौजूदा निजी एपीआई का उपयोग नहीं करता है।

मैंने DGTextField नामक एक नियंत्रण बनाया है जो UITextField का विस्तार करता है।


यह भी खूब रही। ईमानदारी से, इस वजह से, मैं निश्चित रूप से डॉक्स में "अनुरूपता" पर कड़ी नजर रखूंगा। हालाँकि, मुझे खुशी है कि केवल एक व्यक्ति को इस पर पढ़ने और टिंकर करने में समय बिताना पड़ा। उम्मीद है कि अन्य लोग इसे देख और उपयोग कर पाएंगे!
रिले

हालाँकि, मैं एनीमेशन विकल्पों की सिफारिश कर सकता हूं, @propery को हटाकर बस सेटर्स और गेटर्स बनाने के साथ-साथ कस्टम कैरेट चौड़ाई के लिए एक सेटर और गेट्टर भी। आपको दिलचस्पी नहीं हो सकती है, लेकिन मुझे हमेशा छोटे ट्वीक्स से प्यार है!
रिले

@ मुझे खुशी है कि आप मेरे समाधान से लाभ उठाने में सक्षम थे। रेपो को कांटा करने के लिए बेझिझक और आप जो भी साझा करना चाहते हैं उसे जोड़ दें।
दाव

3
IOS 7 में यह बहुत आसान है - नीचे मेरा जवाब देखें: stackoverflow.com/a/18945907/1103584
2

12
yourTextField.tintColor = [UIColor whiteColor];

अगर आप इसे कोड में सेट करते हैं तो यह काम करता है, 'किसी भी तरह से कलर ट्रिगर इसे इंटरफ़ेस बिल्डर (Xcode 6.1.1) में नहीं करता है। यह किसी भी उपस्थिति प्रॉक्सी को बदलने की आवश्यकता के बिना अच्छी तरह से अनुकूल है।


2
किसी अज्ञात कारण से यह मेरे लिए व्हाइटक्लर के साथ काम नहीं करता है लेकिन हर दूसरे रंग (iOS 8 पर परीक्षण) के साथ काम करता है। मुझे ऐसा रंग सेट करना था जो लगभग सफेद हो लेकिन उसे काम करने के लिए सफेद न हो।
लेसज़ेक स्ज़ैरी

@LeszekSzary अरे! आपने मेरा दिन बचाया! मैं लगभग 4 घंटे कोशिश कर रहा था और आपके शब्दों का सुराग था! Apple को इस पागल बग को ठीक करना चाहिए जो वास्तव में डेवलपर को पागल करता है।
कार्तिक रमेश

10

स्थापना tintColorके लिए UITextFieldऔर UITextViewअलग ढंग से काम करता है। जबकि कर्सर रंग बदलने के लिए UITextFieldअपडेट tintColorकरने के बाद आपको अतिरिक्त कोड को कॉल करने की आवश्यकता नहीं है , लेकिन UITextViewआपको आवश्यकता है।

तो (आईबी या कोड में यह कोई फर्क नहीं पड़ता) के tintColorलिए स्थापित करने के बाद UITextViewआपको textView.tintColorDidChange()इसे लागू करने के लिए कॉल करने की आवश्यकता होती है (वास्तव में यह पाठ के विन्यास को इसके साक्षात्कार पदानुक्रम के लिए नीचे पारित कर देगा)।


5

इसने मेरे लिए तेजी से काम किया:

UITextField.tintColor = UIColor.blackColor()

आप इसे स्टोरीबोर्ड में भी सेट कर सकते हैं: https://stackoverflow.com/a/18759577/3075340


यह काम नहीं करता है। मुझे त्रुटि मिली:Instance member 'tintcolor' cannot be used on type 'UITextField'
pableiros

@pableiros ऊपर स्विफ्ट 2 के साथ था। शायद आप अब स्विफ्ट 3 का उपयोग कर रहे हैं?
माइक्रो

मैंने स्विफ्ट 3 और स्विफ्ट 2.3 पर कोशिश की, मुझे यकीन नहीं है कि अगर स्विफ्ट 2.2 पर है और यह कम काम करता है
pableiros

3

एक और अधिक सामान्य तरीका यूविवि की उपस्थिति के टिंटकलर को सेट करना होगा।

UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];

यदि आप कई डिफ़ॉल्ट UI तत्वों का उपयोग कर रहे हैं तो समझ में आता है।


2
हम्म्म ... इसके कई अन्य दुष्प्रभाव हैं ... सवाल केवल कैरेट के रंग को बदलने के बारे में पूछ रहा है, और आपका जवाब ऐप में हर एक यूआईवीवाईवाई को टिंट करने जा रहा है ... यह संभवतः वह दृष्टिकोण नहीं है जिसे ज्यादातर लोग चाहते हैं लेना।
डिस्कवरी

उस पर +1, बहुत सारे साइड इफेक्ट, अगर लक्ष्य सिर्फ कैरेट का रंग बदलना है। स्थापना UIView tintColor उपयोगी है जब आप एक कंटेनर स्टाइल रहे हैं (लेकिन फिर मैं का उपयोग नहीं होगा[UIView appearance]
colinta

2

कोशिश करो, मेरे लिए काम कर रहा है।

[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];

6
यह एक निजी पद्धति का उपयोग कर रहा है, लेकिन सुझाव के लिए धन्यवाद। यह आसानी से एक आवेदन को अस्वीकार कर दिया जा सकता है।
रिले


0

दुर्गेश का दृष्टिकोण काम करता है।

मैंने कई बार ऐसे केवीसी समाधानों का भी इस्तेमाल किया। इसके बावजूद यह अनिर्दिष्ट है, लेकिन यह काम करता है। सच कहूं, तो आप यहां किसी भी निजी तरीके का उपयोग नहीं करते हैं - केवल कुंजी-मूल्य कोडिंग जो कानूनी है।

पीएस कल मेरा नया ऐप इस दृष्टिकोण के साथ किसी भी समस्या के बिना AppStore में दिखाई दिया। और यह पहला मामला नहीं है जब मैं केवीसी का उपयोग केवल कुछ रीड-ओनली प्रॉपर्टीज (जैसे नवगटनबार) या निजी आइवर में बदलने में करता हूं।


1
यह एक निजी पद्धति का उपयोग नहीं कर रहा है, बल्कि यह है कि चाबियां अनजाने हैं, जिसका अर्थ है कि उन्हें ऐप स्टोर पर अनुप्रयोगों के लिए उपयोग नहीं किया जा सकता है। आपका आवेदन विषयगत रूप से अस्वीकृत हो सकता है। आपके पास एक तरह का समीक्षक होना चाहिए था, क्योंकि उस पद्धति का उपयोग करने के लिए कई खारिज कर दिए गए थे।
रिले

फिर मेरे पास लगभग 10 तरह के समीक्षक हैं :) और मेरे कई सहयोगी भी हैं।
19

1
बस स्पष्ट करने के लिए, इस मामले में "की-वैल्यू कोडिंग" सुविधा पद्धति का उपयोग करके किसी संपत्ति को एक मूल्य प्रदान कर रहा है। कारण कि हम एक सेटर के रूप में इसका उपयोग कर रहे हैं, इसका कारण यह है कि संपत्ति अप्राप्य / छिपी / निजी है।
रिले

1
यहाँ मेरा मतलब है (शायद मैं कुछ महत्वपूर्ण नहीं जानता) केवल केवीसी पर दस्तावेज़ीकरण का शाब्दिक रूप से कोई प्रतिबंध नहीं है। इसलिए मैं इन सभी का सफलतापूर्वक उपयोग करता हूं। और दूसरों से उम्मीद कर सकते हैं।
पुरुष

1
की सराहना की। हालाँकि, Apple, अपने 'उपयोग की शर्तों के अनुबंध' में कहा गया है कि हमें उनके प्रलेखन में शामिल किसी भी चीज़ का उपयोग करने और खुले तौर पर चर्चा करने की अनुमति है और अनिर्दिष्ट तरीकों के उपयोग को प्रतिबंधित करता है (KVC के माध्यम से 'textInputTraits' सेटर विधि का उपयोग शामिल होगा) संपत्ति अविभाजित है)। अनिवार्य रूप से, यदि आपको दस्तावेज़ में विधि नहीं मिल सकती है, तो यह निषिद्ध है। निषिद्ध हालांकि अस्वीकृति की गारंटी नहीं देता है। मेरे पास कुछ एप्लिकेशन में शामिल कुछ कारणों से अस्वीकृत कर दिए गए हैं जो इसे स्टोर में बनाते हैं। यह अनिर्धारित तरीकों से हिट और मिस है।
रिले

0

स्विफ्ट के साथ इंटरफेस बिल्डर संस्करण के लिए

@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 / स्विफ्ट 5


0

इसके लिए SwiftUI में समकक्ष खोज करने वाले लोगों के लिए Textfieldहै accentColor:

TextField("Label", text: $self.textToBind).accentColor(Color.red)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.