| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- /************************************************************
- * * Hyphenate CONFIDENTIAL
- * __________________
- * Copyright (C) 2016 Hyphenate Inc. All rights reserved.
- *
- * NOTICE: All information contained herein is, and remains
- * the property of Hyphenate Inc.
- * Dissemination of this information or reproduction of this material
- * is strictly forbidden unless prior written permission is obtained
- * from Hyphenate Inc.
- */
- #import "EaseTextView.h"
- @implementation EaseTextView
- #pragma mark - Setters
- - (void)setPlaceHolder:(NSString *)placeHolder {
- if([placeHolder isEqualToString:_placeHolder]) {
- return;
- }
-
- NSUInteger maxChars = [EaseTextView 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 [EaseTextView numberOfLinesForMessage:self.text];
- }
- + (NSUInteger)maxCharactersPerLine {
- return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) ? 33 : 109;
- }
- + (NSUInteger)numberOfLinesForMessage:(NSString *)text {
- return (text.length / [EaseTextView 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 {
- self.accessibilityIdentifier = @"text_view";
- [[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 (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_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
|