You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.5 KiB
153 lines
4.5 KiB
![]()
2 years ago
|
//
|
||
|
// 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
|