| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- //
- // JCHATMessageTextView.m
- // JPush IM
- //
- // Created by Apple on 15/1/14.
- // Copyright (c) 2015年 Apple. All rights reserved.
- //
- #import "JCHATMessageTextView.h"
- #import "JChatConstants.h"
- #import "JCHATAlertToSendImage.h"
- @implementation JCHATMessageTextView
- #pragma mark - Setters
- - (void)setPlaceHolder:(NSString *)placeHolder {
- if([placeHolder isEqualToString:_placeHolder]) {
- return;
- }
- NSUInteger maxChars = [JCHATMessageTextView maxCharactersPerLine];
- if([placeHolder length] > maxChars) {
- placeHolder = [placeHolder substringToIndex:maxChars - 8];
- placeHolder = [[placeHolder stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] stringByAppendingFormat:@"..."];
- }
- _placeHolder = placeHolder;
- [self setNeedsDisplay];
- }
- - (UIResponder *)nextResponder {
- if(_overrideNextResponder == nil){
- return [super nextResponder];
- } else {
- return _overrideNextResponder;
- }
- }
- -(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
- if (_overrideNextResponder != nil) {
- return NO;
- }
- if(action ==@selector(copy:) ||
- action ==@selector(selectAll:)||
- action ==@selector(cut:)||
- action ==@selector(select:)||
- action ==@selector(paste:)) {
- return[super canPerformAction:action withSender:sender];
- }
- return NO;
- }
- /*
- //"反馈"关心的功能
- -(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
- return (action == @selector(paste:));
- }
- - (void)paste:(id)sender {
- UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
- NSTextAttachment *textAttachment = [NSTextAttachment new];
- if (pasteboard.string != nil) {
- [super paste:sender];
- return;
- }
- if (pasteboard.image != nil) {
- textAttachment.image = pasteboard.image;
- NSAttributedString *attString = [NSAttributedString attributedStringWithAttachment:textAttachment];
- [[JCHATAlertToSendImage shareInstance] showInViewWith:pasteboard.image];
- }
- }
- */
- - (void)setPlaceHolderTextColor:(UIColor *)placeHolderTextColor {
- if([placeHolderTextColor isEqual:_placeHolderTextColor]) {
- return;
- }
-
- _placeHolderTextColor = placeHolderTextColor;
- [self setNeedsDisplay];
- }
- #pragma mark - Message text view
- - (NSUInteger)numberOfLinesOfText {
- return [JCHATMessageTextView numberOfLinesForMessage:self.text];
- }
- + (NSUInteger)maxCharactersPerLine {
- return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) ? 33 : 109;
- }
- + (NSUInteger)numberOfLinesForMessage:(NSString *)text {
- return (text.length / [JCHATMessageTextView maxCharactersPerLine]) + 1;
- }
- #pragma mark - Text view overrides
- - (void)setText:(NSString *)text {
- [super setText:text];
- [self setNeedsDisplay];
- }
- - (void)setAttributedText:(NSAttributedString *)attributedText {
- [super setAttributedText:attributedText];
- [self setNeedsDisplay];
- }
- - (void)setContentInset:(UIEdgeInsets)contentInset {
- [super setContentInset:contentInset];
- [self setNeedsDisplay];
- }
- - (void)setFont:(UIFont *)font {
- JCHATMAINTHREAD(^{
- [super setFont:font];
- [self setNeedsDisplay];
- });
-
- }
- - (void)setTextAlignment:(NSTextAlignment)textAlignment {
- [super setTextAlignment:textAlignment];
- [self setNeedsDisplay];
- }
- #pragma mark - Notifications
- - (void)didReceiveTextDidChangeNotification:(NSNotification *)notification {
- [self setNeedsDisplay];
- }
- #pragma mark - Life cycle
- - (void)setup {
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(didReceiveTextDidChangeNotification:)
- name:UITextViewTextDidChangeNotification
- object:self];
-
- _placeHolderTextColor = [UIColor lightGrayColor];
-
- self.autoresizingMask = UIViewAutoresizingFlexibleWidth;
- self.scrollIndicatorInsets = UIEdgeInsetsMake(4.0f, 0.0f, 4.0f, 8.0f);
- self.contentInset = UIEdgeInsetsZero;
- self.scrollEnabled = YES;
- self.scrollsToTop = NO;
- self.userInteractionEnabled = YES;
- self.font = [UIFont systemFontOfSize:16.0f];
- self.textColor = [UIColor blackColor];
- self.backgroundColor = [UIColor whiteColor];
- self.keyboardAppearance = UIKeyboardAppearanceDefault;
- self.keyboardType = UIKeyboardTypeDefault;
- self.returnKeyType = UIReturnKeyDefault;
- self.textAlignment = NSTextAlignmentLeft;
- self.layer.cornerRadius = 6;
- [self.layer setMasksToBounds:YES];
- }
- -(void)awakeFromNib {
- [super awakeFromNib];
- [self setup];
- }
- - (id)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (self) {
- // Initialization code
- [self setup];
- }
- return self;
- }
- - (void)dealloc {
- _placeHolder = nil;
- _placeHolderTextColor = nil;
- [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidChangeNotification object:self];
- }
- #pragma mark - Drawing
- - (void)drawRect:(CGRect)rect {
- [super drawRect:rect];
-
- if([self.text isEqual:@""]) {
- CGRect placeHolderRect = CGRectMake(8.0f,
- 7.0f,
- rect.size.width,
- rect.size.height);
-
- [self.placeHolderTextColor set];
-
- if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_0) {
- NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
- paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
- paragraphStyle.alignment = self.textAlignment;
- [self.placeHolder drawInRect:placeHolderRect
- withAttributes:@{ NSFontAttributeName : self.font,
- NSForegroundColorAttributeName : self.placeHolderTextColor,
- NSParagraphStyleAttributeName : paragraphStyle }];
- }
- else {
- NSMutableParagraphStyle *paragraphStyle= [[NSMutableParagraphStyle alloc] init];
- paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
- paragraphStyle.alignment = self.textAlignment;
- [self.placeHolder drawInRect:placeHolderRect withAttributes:@{NSFontAttributeName:self.font,NSParagraphStyleAttributeName:paragraphStyle}];
- }
- }
- }
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect {
- // Drawing code
- }
- */
- @end
|