수색…


텍스트 변경

빠른

textView.text = "Hello, world!"

목표 -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

목표 -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)

목표 -C

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

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

텍스트 색상 변경

빠른

textView.textColor = UIColor.red

목표 -C

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
}

목표 -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")

노트

  • 이 예제는 원래이 스택 오버플로 (Stack Overflow) 대답 의 개조에서 나온 입니다.

  • 이 대답은 텍스트 필드를 사용하지만 UITextView 에도 같은 개념이 적용됩니다.

  • 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