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.
159 lines
5.0 KiB
159 lines
5.0 KiB
// |
|
// XHMessageTextView.m |
|
// MessageDisplayExample |
|
// |
|
// Created by HUAJIE-1 on 14-4-24. |
|
// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com 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]; |
|
|
|
if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 7.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 { |
|
[self.placeHolder drawInRect:placeHolderRect |
|
withFont:self.font |
|
lineBreakMode:NSLineBreakByTruncatingTail |
|
alignment:self.textAlignment]; |
|
} |
|
} |
|
} |
|
|
|
@end
|
|
|