UITextView(QMUI)

@interface UITextView (QMUI)

/**
 *  convert UITextRange to NSRange, for example, [self qmui_convertNSRangeFromUITextRange:self.markedTextRange]
 */
- (NSRange)qmui_convertNSRangeFromUITextRange:(UITextRange *)textRange;

/**
 *  convert NSRange to UITextRange
 *  @return return nil if range is invalidate.
 */
- (nullable UITextRange *)qmui_convertUITextRangeFromNSRange:(NSRange)range;

/**
 *  设置 text 会让 selectedTextRange 跳到最后一个字符,导致在中间修改文字后光标会跳到末尾,所以设置前要保存一下,设置后恢复过来
 */
- (void)qmui_setTextKeepingSelectedRange:(NSString *)text;

/**
 *  设置 attributedText 会让 selectedTextRange 跳到最后一个字符,导致在中间修改文字后光标会跳到末尾,所以设置前要保存一下,设置后恢复过来
 */
- (void)qmui_setAttributedTextKeepingSelectedRange:(NSAttributedString *)attributedText;

/**
 [UITextView scrollRangeToVisible:] 并不会考虑 textContainerInset.bottom,所以使用这个方法来代替

 @param range 要滚动到的文字区域,如果 range 非法则什么都不做
 */
- (void)qmui_scrollRangeToVisible:(NSRange)range;

/**
 * 将光标滚到可视区域
 */
- (void)qmui_scrollCaretVisibleAnimated:(BOOL)animated;

@end

Undocumented

  • convert UITextRange to NSRange, for example, [self qmui_convertNSRangeFromUITextRange:self.markedTextRange]

    Declaration

    Objective-C

    - (NSRange)qmui_convertNSRangeFromUITextRange:(nonnull UITextRange *)textRange;

    Swift

    func qmui_convertNSRange(from textRange: UITextRange) -> NSRange
  • convert NSRange to UITextRange

    Declaration

    Objective-C

    - (nullable UITextRange *)qmui_convertUITextRangeFromNSRange:(NSRange)range;

    Swift

    func qmui_convertUITextRange(from range: NSRange) -> UITextRange?

    Return Value

    return nil if range is invalidate.

  • 设置 text 会让 selectedTextRange 跳到最后一个字符,导致在中间修改文字后光标会跳到末尾,所以设置前要保存一下,设置后恢复过来

    Declaration

    Objective-C

    - (void)qmui_setTextKeepingSelectedRange:(nonnull NSString *)text;

    Swift

    func qmui_setTextKeepingSelectedRange(_ text: String)
  • 设置 attributedText 会让 selectedTextRange 跳到最后一个字符,导致在中间修改文字后光标会跳到末尾,所以设置前要保存一下,设置后恢复过来

    Declaration

    Objective-C

    - (void)qmui_setAttributedTextKeepingSelectedRange:
        (nonnull NSAttributedString *)attributedText;

    Swift

    func qmui_setAttributedTextKeepingSelectedRange(_ attributedText: NSAttributedString)
  • [UITextView scrollRangeToVisible:] 并不会考虑 textContainerInset.bottom,所以使用这个方法来代替

    Declaration

    Objective-C

    - (void)qmui_scrollRangeToVisible:(NSRange)range;

    Swift

    func qmui_scrollRangeToVisible(_ range: NSRange)

    Parameters

    range

    要滚动到的文字区域,如果 range 非法则什么都不做

  • 将光标滚到可视区域

    Declaration

    Objective-C

    - (void)qmui_scrollCaretVisibleAnimated:(BOOL)animated;

    Swift

    func qmui_scrollCaretVisible(animated: Bool)