| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- //
- // TResponderTextView.m
- // TUIKit
- //
- // Created by kennethmiao on 2018/10/25.
- // Copyright © 2018 Tencent. All rights reserved.
- //
- #import "TUIResponderTextView.h"
- #import <TIMCommon/NSString+TUIEmoji.h>
- @interface TUIResponderTextView ()
- @property (nonatomic ,strong) UILabel *placeHolderLabel;
- @end
- @implementation TUIResponderTextView
- - (instancetype)init {
- self = [super init];
- if (self) {
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(didReceiveTextDidChangeNotification:)
- name:UITextViewTextDidChangeNotification
- object:self];
- [self placeAndLayoutSubviews];
- }
- return self;
- }
- - (void)placeAndLayoutSubviews {
- [self addSubview:self.placeHolderLabel];
- [self.placeHolderLabel mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self).offset(7.0);
- make.left.equalTo(self).offset(14.0);
- make.right.equalTo(self).offset(-14.0);
- }];
- }
- - (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidChangeNotification object:self];
- }
- #pragma mark - Notifications
- - (void)didReceiveTextDidChangeNotification:(NSNotification *)notification {
- self.placeHolderLabel.hidden = self.text.length > 0 ? YES : NO;
- }
- #pragma mark getter and setter
- - (UILabel *)placeHolderLabel {
- if (_placeHolderLabel == nil) {
- _placeHolderLabel = [[UILabel alloc] init];
- _placeHolderLabel.font = self.font;
- _placeHolderLabel.textColor = [UIColor lightGrayColor];
- _placeHolderLabel.textAlignment = NSTextAlignmentLeft;
- _placeHolderLabel.lineBreakMode = NSLineBreakByTruncatingTail;
- }
- return _placeHolderLabel;
- }
- - (void)setPlaceHolder:(NSString *)placeHolder {
- _placeHolder = placeHolder;
- self.placeHolderLabel.text = _placeHolder;
- }
- - (void)setPlaceHolderColor:(UIColor *)placeHolderColor {
- _placeHolderColor = placeHolderColor;
- self.placeHolderLabel.textColor = _placeHolderColor;
- }
- - (UIResponder *)nextResponder {
- if (_overrideNextResponder == nil) {
- return [super nextResponder];
- } else {
- return _overrideNextResponder;
- }
- }
- - (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
- if (_overrideNextResponder != nil)
- return NO;
- else
- return [super canPerformAction:action withSender:sender];
- }
- - (void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder API_AVAILABLE(ios(13.0)) {
- if (@available(iOS 16.0, *)) {
- [builder removeMenuForIdentifier:UIMenuLookup];
- }
- [super buildMenuWithBuilder:builder];
- }
- - (void)deleteBackward {
- id<TUIResponderTextViewDelegate> delegate = (id<TUIResponderTextViewDelegate>)self.delegate;
- if ([delegate respondsToSelector:@selector(onDeleteBackward:)]) {
- [delegate onDeleteBackward:self];
- }
- [super deleteBackward];
- }
- - (void)setText:(NSString *)text {
- [super setText:text];
- if (self.delegate && [self.delegate respondsToSelector:@selector(textViewDidChange:)]) {
- [self.delegate textViewDidChange:self];
- }
- }
- - (void)copy:(__unused id)sender {
- UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
- pasteboard.string = [[self.textStorage attributedSubstringFromRange:self.selectedRange] tui_getPlainString];
- }
- - (void)cut:(nullable id)sender {
- UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
- pasteboard.string = [[self.textStorage attributedSubstringFromRange:self.selectedRange] tui_getPlainString];
- UIFont *textFont = [UIFont systemFontOfSize:16.0];
- NSAttributedString *spaceString = [[NSAttributedString alloc] initWithString:@"" attributes:@{NSFontAttributeName : textFont}];
- [self.textStorage replaceCharactersInRange:self.selectedRange withAttributedString:spaceString];
- }
- @end
|