Szukaj…
Zmień tekst
Szybki
textView.text = "Hello, world!"
Cel C:
textView.text = @"Hello, world!";
Ustaw przypisany tekst
// 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
Zmień wyrównanie tekstu
Szybki
textView.textAlignment = .left
Cel C
textView.textAlignment = NSTextAlignmentLeft;
Metody UITextViewDelegate
Odpowiadanie na edytowanie powiadomień
-
textViewShouldBeginEditing(_:)
-
textViewDidBeginEditing(_:)
-
textViewShouldEndEditing(_:)
-
textViewDidEndEditing(_:)
Reagowanie na zmiany tekstu
-
textView(_:shouldChangeTextIn:replacementText:)
-
textViewDidChange(_:)
Odpowiadanie na adres URL
-
textView(_: UITextView, shouldInteractWithURL: NSURL, inRange: NSRange) -> Bool
Zmień czcionkę
Szybki
//System Font
textView.font = UIFont.systemFont(ofSize: 12)
//Font of your choosing
textView.font = UIFont(name: "Font Name", size: 12)
Cel C
//System Font
textView.font = [UIFont systemFontOfSize:12];
//Font of your choosing
textView.font = [UIFont fontWithName:@"Font Name" size:12];
Zmień kolor tekstu
Szybki
textView.textColor = UIColor.red
Cel C
textView.textColor = [UIColor redColor];
UITextView z tekstem HTML
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];
Automatyczne wykrywanie łączy, adresów, dat i innych
UITextView
ma wbudowaną obsługę automatycznego wykrywania różnych danych. Dane, które można automatycznie wykryć, obejmują obecnie:
enum {
UIDataDetectorTypePhoneNumber = 1 << 0,
UIDataDetectorTypeLink = 1 << 1,
UIDataDetectorTypeAddress = 1 << 2,
UIDataDetectorTypeCalendarEvent = 1 << 3,
UIDataDetectorTypeNone = 0,
UIDataDetectorTypeAll = NSUIntegerMax
};
Włączanie automatycznego wykrywania
// you may add as many as you like by using the `|` operator between options
textView.dataDetectorTypes = (UIDataDetectorTypeLink | UIDataDetectorTypePhoneNumber);
Jeśli ta opcja jest włączona, tekst będzie wyświetlany jako hiperłącze w UITextView
Dane, które można kliknąć
Aby umożliwić kliknięcie linku (co spowoduje różne działania w zależności od typu danych), należy upewnić się, że UITextView
jest możliwy do UITextView
ale nie można go edytować, a interakcja użytkownika jest włączona
textView.editable = NO;
textView.selectable = YES;
textView.userInteractionEnabled = YES; // YES by default
Sprawdź, czy jest pusta lub zero
Szybki
if let text = self.textView.text where !text.isEmpty {
// Do stuff for text
} else {
// Do stuff for nil text or empty string
}
Cel C
if (self.textView.text.length > 0){
// Do stuff for text
} else {
// Do stuff for nil text or empty string
}
Pobieranie i ustawianie pozycji kursora
Przydatna informacja
Sam początek tekstu pola tekstowego:
let startPosition: UITextPosition = textView.beginningOfDocument
Sam koniec tekstu pola tekstowego:
let endPosition: UITextPosition = textView.endOfDocument
Aktualnie wybrany zakres:
let selectedRange: UITextRange? = textView.selectedTextRange
Uzyskaj pozycję kursora
if let selectedRange = textView.selectedTextRange {
let cursorPosition = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: selectedRange.start)
print("\(cursorPosition)")
}
Ustaw pozycję kursora
Aby ustawić pozycję, wszystkie te metody ustawiają zakres z tymi samymi wartościami początkowymi i końcowymi.
Do początku
let newPosition = textView.beginningOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
Do końca
let newPosition = textView.endOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
Do jednej pozycji na lewo od bieżącej pozycji kursora
// 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)
}
}
Do dowolnego stanowiska
Zacznij od początku i przesuń 5 znaków w prawo.
let arbitraryValue: Int = 5
if let newPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}
Związane z
Zaznacz cały tekst
textView.selectedTextRange = textView.textRangeFromPosition(textView.beginningOfDocument, toPosition: textView.endOfDocument)
Wybierz zakres tekstu
// 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!)
}
Wstaw tekst w bieżącej pozycji kursora
textView.insertText("Hello")
Notatki
Ten przykład pochodzi z adaptacji tej odpowiedzi Przepełnienie stosu .
Ta odpowiedź używa pola tekstowego, ale te same pojęcia dotyczą
UITextView
.Użyj
textView.becomeFirstResponder()
aby skupić się na polu tekstowym i sprawić, aby klawiatura się pojawiła.Zobacz tę odpowiedź, aby dowiedzieć się, jak uzyskać tekst z pewnego zakresu.
Związane z
- Jak utworzyć zakres w Swift (Zajmuje się pośrednio kwestią, dlaczego musimy tutaj korzystać z
selectedTextRange
, a nie tylkoselectedRange
)
Usuń dodatkowe wypełnienia, aby dopasować je do dokładnie odmierzonego tekstu.
UITextView
ma domyślnie dodatkowe wypełnienia. Czasami jest to denerwujące, zwłaszcza jeśli chcesz zmierzyć tekst bez instancji widoku i umieścić go w określonym miejscu dokładnie.
Zrób to, aby usunąć takie wypełnienia.
messageTextView.textContainerInset = UIEdgeInsetsZero
messageTextView.textContainer.lineFragmentPadding = 0
Teraz możesz zmierzyć rozmiar tekstu za pomocą NSAttributedString.boundingRectWithSize(...)
i zmienić rozmiar UITextView
aby dopasować go do tekstu.
let budget = getSomeCGSizeBudget()
let text = getSomeAttributedString()
let textSize = text.boundingRectWithSize(budget, options: [.UsesLineFragmentOrigin, .UsesFontLeading], context: nil).size
messageTextView.frame.size = textSize // Just fits.