खोज…
पाठ बदलें
तीव्र
textView.text = "Hello, world!"
उद्देश्य सी:
textView.text = @"Hello, world!";
जिम्मेदार पाठ सेट करें
// Modify some of the attributes of the attributed string.
let attributedText = NSMutableAttributedString(attributedString: textView.attributedText!)
// Use NSString so the result of rangeOfString is an NSRange.
let text = textView.text! as NSString
// Find the range of each element to modify.
let tintedRange = text.range(of: NSLocalizedString("tinted", comment: ""))
let highlightedRange = text.range(of: NSLocalizedString("highlighted", comment: ""))
// Add tint.
attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: tintedRange)
// Add highlight.
attributedText.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellow, range: highlightedRange)
textView.attributedText = attributedText
पाठ संरेखण बदलें
तीव्र
textView.textAlignment = .left
उद्देश्य सी
textView.textAlignment = NSTextAlignmentLeft;
UITextViewDelegate विधियाँ
संपादन सूचनाओं पर प्रतिक्रिया
-
textViewShouldBeginEditing(_:)
-
textViewDidBeginEditing(_:)
-
textViewShouldEndEditing(_:)
-
textViewDidEndEditing(_:)
पाठ परिवर्तन पर प्रतिक्रिया
-
textView(_:shouldChangeTextIn:replacementText:)
-
textViewDidChange(_:)
URL पर प्रतिक्रिया दे रहा है
-
textView(_: UITextView, shouldInteractWithURL: NSURL, inRange: NSRange) -> Bool
फ़ॉन्ट बदलें
तीव्र
//System Font
textView.font = UIFont.systemFont(ofSize: 12)
//Font of your choosing
textView.font = UIFont(name: "Font Name", size: 12)
उद्देश्य सी
//System Font
textView.font = [UIFont systemFontOfSize:12];
//Font of your choosing
textView.font = [UIFont fontWithName:@"Font Name" size:12];
टेक्स्ट का रंग बदलें
तीव्र
textView.textColor = UIColor.red
उद्देश्य सी
textView.textColor = [UIColor redColor];
HTML टेक्स्ट के साथ UITextView
NSString *htmlString = @"<p> This is an <b>HTML</b> text</p>";
NSAttributedString *attributedString = [[NSMutableAttributedString alloc]
initWithData: [htmlString dataUsingEncoding:NSUnicodeStringEncoding]
options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
documentAttributes: nil
error: nil
];
_yourTextView.attributedText = attributedString;
// If you want to modify the font
field.font = [UIFont fontWithName:@"Raleway-Regular" size:15];
ऑटो पता लिंक, पते, दिनांक, और अधिक
UITextView
ने विभिन्न डेटा का पता लगाने के लिए ऑटो के समर्थन में बनाया है। वर्तमान में स्वतः-पहचाने जाने योग्य डेटा में शामिल हैं:
enum {
UIDataDetectorTypePhoneNumber = 1 << 0,
UIDataDetectorTypeLink = 1 << 1,
UIDataDetectorTypeAddress = 1 << 2,
UIDataDetectorTypeCalendarEvent = 1 << 3,
UIDataDetectorTypeNone = 0,
UIDataDetectorTypeAll = NSUIntegerMax
};
ऑटो-डिटेक्शन को सक्षम करना
// you may add as many as you like by using the `|` operator between options
textView.dataDetectorTypes = (UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber);
सक्षम होने पर, पाठ UITextView
पर हाइपरलिंक के रूप में दिखाई देगा
क्लिक करने योग्य डेटा
लिंक को क्लिक करने की अनुमति देने के लिए (जो डेटा प्रकार के आधार पर अलग-अलग क्रियाओं में परिणाम देगा) आपको यह सुनिश्चित करना होगा कि UITextView
चयन करने योग्य है, लेकिन संपादन योग्य नहीं है और उपयोगकर्ता सहभागिता सक्षम है
textView.editable = NO;
textView.selectable = YES;
textView.userInteractionEnabled = YES; // YES by default
यह देखने के लिए जांचें कि रिक्त या शून्य है
तीव्र
if let text = self.textView.text where !text.isEmpty {
// Do stuff for text
} else {
// Do stuff for nil text or empty string
}
उद्देश्य सी
if (self.textView.text.length > 0){
// Do stuff for text
} else {
// Do stuff for nil text or empty string
}
कर्सर पोस्टिंग प्राप्त करना और स्थापित करना
उपयोगी जानकारी
पाठ फ़ील्ड पाठ की बहुत शुरुआत:
let startPosition: UITextPosition = textView.beginningOfDocument
पाठ फ़ील्ड टेक्स्ट का बहुत अंत:
let endPosition: UITextPosition = textView.endOfDocument
वर्तमान में चयनित रेंज:
let selectedRange: UITextRange? = textView.selectedTextRange
कर्सर स्थिति प्राप्त करें
if let selectedRange = textView.selectedTextRange {
let cursorPosition = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: selectedRange.start)
print("\(cursorPosition)")
}
कर्सर स्थिति सेट करें
स्थिति सेट करने के लिए, ये सभी विधियां वास्तव में समान प्रारंभ और अंत मानों के साथ एक सीमा निर्धारित कर रही हैं।
शुरुआत तक
let newPosition = textView.beginningOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
अंत की ओर
let newPosition = textView.endOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
वर्तमान कर्सर स्थिति के बाईं ओर एक स्थिति के लिए
// only if there is a currently selected range
if let selectedRange = textView.selectedTextRange {
// and only if the new position is valid
if let newPosition = textView.positionFromPosition(selectedRange.start, inDirection: UITextLayoutDirection.Left, offset: 1) {
// set the new position
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}
}
एक अनियंत्रित स्थिति में
शुरुआत में शुरू करें और 5 वर्णों को दाईं ओर ले जाएं।
let arbitraryValue: Int = 5
if let newPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}
सम्बंधित
सभी पाठ का चयन करें
textView.selectedTextRange = textView.textRangeFromPosition(textView.beginningOfDocument, toPosition: textView.endOfDocument)
पाठ की एक श्रृंखला का चयन करें
// Range: 3 to 7
let startPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 3)
let endPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 7)
if startPosition != nil && endPosition != nil {
textView.selectedTextRange = textView.textRangeFromPosition(startPosition!, toPosition: endPosition!)
}
वर्तमान कर्सर स्थिति पर टेक्स्ट डालें
textView.insertText("Hello")
टिप्पणियाँ
यह उदाहरण मूल रूप से इस स्टैक ओवरफ्लो उत्तर के अनुकूलन से आता है।
यह उत्तर टेक्स्ट फ़ील्ड का उपयोग करता है, लेकिन समान अवधारणा
UITextView
लागू होती है।टेक्स्ट फ़ील्ड पर फ़ोकस देने और कीबोर्ड को प्रदर्शित करने के लिए
textView.becomeFirstResponder()
का उपयोग करें।कुछ सीमा पर पाठ कैसे प्राप्त करें, इसके लिए यह उत्तर देखें।
सम्बंधित
- स्विफ्ट में एक रेंज कैसे बनाएं (अप्रत्यक्ष रूप से इस मुद्दे से निपटता है कि हमें सिर्फ
selectedRange
Range के बजाय यहांselectedTextRange
का उपयोग क्यों करना है)
एक ठीक मापा पाठ के लिए अतिरिक्त पैडिंग को निकालें।
UITextView
में डिफ़ॉल्ट रूप से अतिरिक्त पैडिंग हैं। कभी-कभी यह विशेष रूप से कष्टप्रद होता है यदि आप बिना उदाहरण के कुछ पाठ को मापना चाहते हैं और उन्हें किसी क्षेत्र में ठीक-ठीक स्थान पर रखना चाहते हैं।
ऐसा पैडिंग को हटाने के लिए करें।
messageTextView.textContainerInset = UIEdgeInsetsZero
messageTextView.textContainer.lineFragmentPadding = 0
अब आप NSAttributedString.boundingRectWithSize(...)
का उपयोग करके टेक्स्ट साइज़ को माप सकते हैं, और इसे टेक्स्ट में फिट करने के लिए एक UITextView
आकार बदल सकते हैं।
let budget = getSomeCGSizeBudget()
let text = getSomeAttributedString()
let textSize = text.boundingRectWithSize(budget, options: [.UsesLineFragmentOrigin, .UsesFontLeading], context: nil).size
messageTextView.frame.size = textSize // Just fits.