ASEditableTextNode
는 UIKit에서 제공해주는 UITextView
와 UITextField
를 사용하듯이 사용할 수 있는 Node입니다.
UITextView
가 wrapping되어 있으며 ASTextKitComponents
를 통해서 glyph에 따른 노드의 사이즈를 렌더링합니다.
let node = ASEditableTextNode()
let textView: UITextView = node.textView
let view: UIView = node.view
// view와 textView는 동일하지 않습니다.
기본적으로 아래와 같이 기본 attributedText와 textContainerInset를 지정하여 사용할 수 있습니다.
let node = ASEditableTextNode()
node.attributedText = NSAttributedString(string: "안녕하세요.")
node.attributedPlaceholderText = NSAttributedString(string: "입력해주세요.")
node.textContainerInset = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
가장 기본적인 사용방법이며 내부적으로는 ASTextKitComponents를 이용하여 초기화합니다.
let textKitComponents = ASTextKitComponents(attributedSeedString: nil,
textContainerSize: CGSize.zero)
let placeholderComponents = ASTextKitComponents(attributedSeedString: nil,
textContainerSize: CGSize.zero)
let node = ASEditableTextNode.init(textKitComponents: textKitComponents,
placeholderTextKitComponents: placeholderComponent)
필요에 따라서 custom NSTextLayoutManager 및 NSTextStorage를 이용하여 초기화해야하는 경우도 있는데 이러한 경우는 아래의 코드와 같이 ASTextKitComponents를 사용해서 Initialization하는 방법이 있습니다.
let textStorage = NSTextStorage.init()
let manager = NSTextLayoutManager.init()
let textKitComponents: ASTextKitComponents =
.init(textStorage: textStorage,
textContainerSize: .zero,
layoutManager: manager)
let placeholderTextKit: ASTextKitComponents =
.init(attributedSeedString: NSAttributedString(string: "insert:"),
textContainerSize: .zero)
let node = ASEditableTextNode.init(textKitComponents: textKitComponents,
placeholderTextKitComponents: placeholderTextKit)
타이핑하는데 있어서 어트리뷰트를 지정하기 위해선 typingAttributes
에 원하는 값을 지정하면 됩니다.
editableTextNode.typingAttributes = [NSForegroundColorAttributeName: UIColor.blue,
NSBackgroundColorAttributeName: UIColor.red]
UITextViewDelegate
와 마찬가지로 ASEditableTextNode
도 유사한 Delegate를 제공해줍니다.
let node = ASEditableTextNode()
node.delegate = self
editing가능 여부에 대한 제어 메서드로 제어 가능 여부를 Boolean값으로 반환합니다.
func editableTextNodeShouldBeginEditing(_ editableTextNode: ASEditableTextNode) -> Bool
editing 시작이후에 대한 이벤트를 받습니다.
func editableTextNodeDidBeginEditing(_ editableTextNode: ASEditableTextNode)
editing이 끝난 이후에 대한 이벤트를 받습니다.
func editableTextNodeDidFinishEditing(_ editableTextNode: ASEditableTextNode)
Text변화에 대한 이벤트를 받습니다.
추가 또는 제거되는 text(replacementText)와 영역(shouldChangeTextIn range)를 받습니다.
func editableTextNode(_ editableTextNode: ASEditableTextNode, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool
TextView상 커서의 위치 및 selection의 변화에 대한 이벤트를 받습니다.
func editableTextNodeDidChangeSelection(_ editableTextNode: ASEditableTextNode, fromSelectedRange: NSRange, toSelectedRange: NSRange, dueToEditing: Bool)
shouldChangeText이후 업데이트 결과가 끝났을 때에 대한 이벤트를 받습니다.
func editableTextNodeDidUpdateText(_ editableTextNode: ASEditableTextNode)
ASEditableTextNode의 변화에 따라 상위 노드의 사이즈에 변화를 주기 위해선 setNeedsLayout
을 호출하면됩니다.
func editableTextNodeDidUpdateText(_ editableTextNode: ASEditaleTextNode) {
editableTextNode.supernode?.setNeedsLayout()
}
UITextView에서 제공해주는 기본 property와 동일하게 사용합니다.
Name | Description |
---|---|
autocapitalizationType | 자동 대문자 처리에 대한 옵션을 지정할 수 있습니다. |
autocorrectionType | 자동 교정 작동에 대한 옵션을 지정할 수 있습니다. |
spellCheckingType | 문자 또는 문장의 스펠링 처리에 대해서 교정해주는 옵션을 지정할 수 있습니다. |
keyboardType | 키보드 타입에 대한 옵션입니다. (숫자 패널, 이메일 etc) |
returnKeyType | 키보드상 Return키에 대한 옵션입니다. |
keyboardAppearance | 키보드 색상에 대한 옵션입니다. |
enablesReturnKeyAutomatically | 기본값은 False이며, 자동 Return처리에 대한 플래그입니다. |
secureTextEntry | 기본값은 False이며, 보안상 필요한 Text처리에 대한 플래그입니다. |
다음 내역은 ASEditableTextNode에서만 제공해주는 편의용 기능들 입니다.
Name | Description |
---|---|
maximumLinesToDisplay | 최대 보여질 수 있는 라인수를 반환합니다. |
isDisplayingPlaceholder | placehodler가 보여지는 상태인지에 대한 Bool값을 반환하는 method입니다. |