Поиск…


Изменить текст

стриж

textView.text = "Hello, world!"

Objective-C:

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

Objective-C

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)

Objective-C

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

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

Изменить цвет текста

стриж

textView.textColor = UIColor.red

Objective-C

textView.textColor = [UIColor redColor];

UITextView с текстом 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];

Автообнаружение ссылок, адресов, дат и т. Д.

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 по ссылке (что приведет к различным действиям в зависимости от типа данных), вы должны убедиться, что 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
}

Objective-C

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() чтобы уделить внимание текстовому полю и textView.becomeFirstResponder() клавиатуру.

  • См. Этот ответ для получения текста в определенном диапазоне.

связанные с

Удалите дополнительные прокладки, чтобы они соответствовали точно измеренному тексту.

По умолчанию 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.


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow