Sök…


Ändra text

Snabb

textView.text = "Hello, world!"

Objective-C:

textView.text = @"Hello, world!";

Ställ in tillskriven text

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

Ändra textjustering

Snabb

textView.textAlignment = .left

Objective-C

textView.textAlignment = NSTextAlignmentLeft;

UITextViewDelegate-metoder

Svara på redigeringsmeddelanden

  • textViewShouldBeginEditing(_:)
  • textViewDidBeginEditing(_:)
  • textViewShouldEndEditing(_:)
  • textViewDidEndEditing(_:)

Svara på textändringar

  • textView(_:shouldChangeTextIn:replacementText:)
  • textViewDidChange(_:)

Svara på URL

  • textView(_: UITextView, shouldInteractWithURL: NSURL, inRange: NSRange) -> Bool

Byt teckensnitt

Snabb

//System Font
textView.font = UIFont.systemFont(ofSize: 12)

//Font of your choosing
textView.font = UIFont(name: "Font Name", size: 12)

Objective-C

//System Font
textView.font = [UIFont systemFontOfSize:12];

//Font of your choosing
textView.font = [UIFont fontWithName:@"Font Name" size:12];

Ändra textfärg

Snabb

textView.textColor = UIColor.red

Objective-C

textView.textColor = [UIColor redColor];

UITextView med HTML-text

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];

Autodetektera länkar, adresser, datum och mer

UITextView har inbyggt stöd för att automatiskt upptäcka en mängd data. Data som kan upptäckas automatiskt inkluderar för närvarande:

enum {
   UIDataDetectorTypePhoneNumber   = 1 << 0,
   UIDataDetectorTypeLink          = 1 << 1,
   UIDataDetectorTypeAddress       = 1 << 2,
   UIDataDetectorTypeCalendarEvent = 1 << 3,
   UIDataDetectorTypeNone          = 0,
   UIDataDetectorTypeAll           = NSUIntegerMax
};

Aktiverar automatisk upptäckt

// you may add as many as you like by using the `|` operator between options
textView.dataDetectorTypes = (UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber);

Om den är aktiverad visas texten som en hyperlänk på UITextView

Klickbar data

För att låta klicka på länken (vilket resulterar i olika åtgärder beroende på datatyp) måste du se till att UITextView är valbar men inte redigerbar och att användarinteraktion är aktiverad

textView.editable = NO;
textView.selectable = YES;
textView.userInteractionEnabled = YES; // YES by default

Kontrollera om det är tomt eller noll

Snabb

if let text = self.textView.text where !text.isEmpty {
    // Do stuff for text
} else {
    // Do stuff for nil text or empty string
}

Objective-C

if (self.textView.text.length > 0){
    // Do stuff for text
}   else {
    // Do stuff for nil text or empty string
}

Få och ställa in markörpositionen

Användbar information

Själva början av textfälttexten:

let startPosition: UITextPosition = textView.beginningOfDocument

Slutet på textfälttexten:

let endPosition: UITextPosition = textView.endOfDocument

Det för närvarande valda intervallet:

let selectedRange: UITextRange? = textView.selectedTextRange

Få markörens position

if let selectedRange = textView.selectedTextRange {
    
    let cursorPosition = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: selectedRange.start)
    
    print("\(cursorPosition)")
}

Ställ in markörens position

För att ställa in positionen ställer alla dessa metoder faktiskt in ett område med samma start- och slutvärden.

Till början

let newPosition = textView.beginningOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)

Till slutet

let newPosition = textView.endOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)

Till en position till vänster om den aktuella markörpositionen

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

Till en godtycklig position

Börja i början och flytta 5 tecken till höger.

let arbitraryValue: Int = 5
if let newPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
    
    textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}

Relaterad

Välj all text

textView.selectedTextRange = textView.textRangeFromPosition(textView.beginningOfDocument, toPosition: textView.endOfDocument)

Välj ett textintervall

// 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!)
}

Infoga text i den aktuella markörpositionen

textView.insertText("Hello")

anteckningar

  • Detta exempel kommer ursprungligen från en anpassning av detta Stack Overflow-svar .

  • Detta svar använder ett textfält, men samma begrepp gäller för UITextView .

  • Använd textView.becomeFirstResponder() för att fokusera textView.becomeFirstResponder() och få tangentbordet att visas.

  • Se det här svaret för hur du får texten inom ett visst intervall.

Relaterad

Ta bort extra paddningar för att passa en exakt uppmätt text.

UITextView har extra paddningar som standard. Ibland är det irriterande, särskilt om du vill mäta lite text utan att se instans och placera dem på något område exakt.

Gör detta för att ta bort sådana stoppningar.

messageTextView.textContainerInset = UIEdgeInsetsZero
messageTextView.textContainer.lineFragmentPadding = 0

Nu kan du mäta textstorlek med hjälp av NSAttributedString.boundingRectWithSize(...) och ändra storlek på en UITextView bara för att passa den i texten.

let budget = getSomeCGSizeBudget()
let text = getSomeAttributedString()
let textSize = text.boundingRectWithSize(budget, options: [.UsesLineFragmentOrigin, .UsesFontLeading], context: nil).size
messageTextView.frame.size = textSize // Just fits.


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow