// // XHMessageTextView.m // MessageDisplayExample // // Created by HUAJIE-1 on 14-4-24. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import "XHMessageTextView.h" @implementation XHMessageTextView #pragma mark - Setters - (void)setPlaceHolder:(NSString *)placeHolder { if([placeHolder isEqualToString:_placeHolder]) { return; } NSUInteger maxChars = [XHMessageTextView maxCharactersPerLine]; if([placeHolder length] > maxChars) { placeHolder = [placeHolder substringToIndex:maxChars - 8]; placeHolder = [[placeHolder stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] stringByAppendingFormat:@"..."]; } _placeHolder = placeHolder; [self setNeedsDisplay]; } - (void)setPlaceHolderTextColor:(UIColor *)placeHolderTextColor { if([placeHolderTextColor isEqual:_placeHolderTextColor]) { return; } _placeHolderTextColor = placeHolderTextColor; [self setNeedsDisplay]; } #pragma mark - Message text view - (NSUInteger)numberOfLinesOfText { return [XHMessageTextView numberOfLinesForMessage:self.text]; } + (NSUInteger)maxCharactersPerLine { return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) ? 33 : 109; } + (NSUInteger)numberOfLinesForMessage:(NSString *)text { return (text.length / [XHMessageTextView 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 { [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(10.0f, 0.0f, 10.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; } - (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 length] == 0 && self.placeHolder) { CGRect placeHolderRect = CGRectMake(10.0f, 7.0f, rect.size.width, rect.size.height); [self.placeHolderTextColor set]; 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 }]; } } @end