IOS में कर्सर / कैरेट का रंग बदलने के बारे में सोच रहा हूं UITextField(और UITextViewयदि इसका वही उत्तर है)। मैंने OSX विकास के लिए उत्तर देखे हैं, लेकिन iOS के लिए कुछ भी नहीं।
क्या यह भी संभव है?
IOS में कर्सर / कैरेट का रंग बदलने के बारे में सोच रहा हूं UITextField(और UITextViewयदि इसका वही उत्तर है)। मैंने OSX विकास के लिए उत्तर देखे हैं, लेकिन iOS के लिए कुछ भी नहीं।
क्या यह भी संभव है?
जवाबों:
यदि आप iOS 7+ को लक्षित कर रहे हैं, तो इसे बहुत आसान बना दिया गया है। बस tintColorउपस्थिति प्रॉक्सी का उपयोग करके कर्सर के साथ क्षेत्र को बदलें और यह पूरे ऐप पर लागू होगा:
स्विफ्ट 3.0:
UITextField.appearance().tintColor = .black
उद्देश्य सी:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
एक व्यक्ति के लिए एक ही उत्तर लागू होता है UITextField:
स्विफ्ट 3.0:
myTextField.tintColor = .black
उद्देश्य सी
[myTextField setTintColor:[UIColor blackColor]];
स्विफ्ट 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
नोट: यह उत्तर पुराना है और केवल पूर्व iOS 7 विकास के लिए उपयोग किया जाना चाहिए। IOS 7 में उपस्थिति प्रॉक्सी का उपयोग करके 1 लाइन समाधान के लिए अन्य उत्तर देखें।
जब मैं जिस परियोजना में काम कर रहा था, उसी समस्या का सामना करने के बाद मैं इस सवाल पर आया था।
मैं एक समाधान बनाने में कामयाब रहा जिसे AppStore की समीक्षा टीम द्वारा स्वीकार किया जाएगा क्योंकि यह किसी भी मौजूदा निजी एपीआई का उपयोग नहीं करता है।
मैंने DGTextField नामक एक नियंत्रण बनाया है जो UITextField का विस्तार करता है।
yourTextField.tintColor = [UIColor whiteColor];
अगर आप इसे कोड में सेट करते हैं तो यह काम करता है, 'किसी भी तरह से कलर ट्रिगर इसे इंटरफ़ेस बिल्डर (Xcode 6.1.1) में नहीं करता है। यह किसी भी उपस्थिति प्रॉक्सी को बदलने की आवश्यकता के बिना अच्छी तरह से अनुकूल है।
स्थापना tintColorके लिए UITextFieldऔर UITextViewअलग ढंग से काम करता है। जबकि कर्सर रंग बदलने के लिए UITextFieldअपडेट tintColorकरने के बाद आपको अतिरिक्त कोड को कॉल करने की आवश्यकता नहीं है , लेकिन UITextViewआपको आवश्यकता है।
तो (आईबी या कोड में यह कोई फर्क नहीं पड़ता) के tintColorलिए स्थापित करने के बाद UITextViewआपको textView.tintColorDidChange()इसे लागू करने के लिए कॉल करने की आवश्यकता होती है (वास्तव में यह पाठ के विन्यास को इसके साक्षात्कार पदानुक्रम के लिए नीचे पारित कर देगा)।
इसने मेरे लिए तेजी से काम किया:
UITextField.tintColor = UIColor.blackColor()
आप इसे स्टोरीबोर्ड में भी सेट कर सकते हैं: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
एक और अधिक सामान्य तरीका यूविवि की उपस्थिति के टिंटकलर को सेट करना होगा।
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
यदि आप कई डिफ़ॉल्ट UI तत्वों का उपयोग कर रहे हैं तो समझ में आता है।
[UIView appearance]
यह केवल एक निजी संपत्ति तक पहुँचने से संभव है और इसलिए ऐप्पल ऐपस्टोर एप्लिकेशन अस्वीकृति का कारण हो सकता है।
दुर्गेश का दृष्टिकोण काम करता है।
मैंने कई बार ऐसे केवीसी समाधानों का भी इस्तेमाल किया। इसके बावजूद यह अनिर्दिष्ट है, लेकिन यह काम करता है। सच कहूं, तो आप यहां किसी भी निजी तरीके का उपयोग नहीं करते हैं - केवल कुंजी-मूल्य कोडिंग जो कानूनी है।
पीएस कल मेरा नया ऐप इस दृष्टिकोण के साथ किसी भी समस्या के बिना AppStore में दिखाई दिया। और यह पहला मामला नहीं है जब मैं केवीसी का उपयोग केवल कुछ रीड-ओनली प्रॉपर्टीज (जैसे नवगटनबार) या निजी आइवर में बदलने में करता हूं।
स्विफ्ट के साथ इंटरफेस बिल्डर संस्करण के लिए
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
तो UITextFieldसे है UISearchBarतो पहले मिल textFieldसे searchBarऔर उसके बाद लागू tintColorसंपत्ति:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
मुझे लगता है कि यदि आप कुछ कस्टम रंग चाहते हैं, तो आप 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
UITextFieldइंटरफ़ेस बिल्डर में इसे कैसे करना है, इसके विस्तृत विवरण , stackoverflow.com/a/18759577/1709587 पर