Last active
August 29, 2015 14:22
-
-
Save MaximKeegan/de244f96c7fe82f730ff to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// RoundedCornersTextView.h | |
// | |
// Created by Maxim Keegan on 03.06.15. | |
// Copyright (c) 2015 Keegan. All rights reserved. | |
// | |
#import <UIKit/UIKit.h> | |
IB_DESIGNABLE | |
@interface RoundedCornersTextView : UITextView | |
@property (nonatomic) IBInspectable UIColor *borderColor; | |
@property (nonatomic) IBInspectable CGFloat borderWidth; | |
@property (nonatomic) IBInspectable CGFloat cornerRadius; | |
@property (nonatomic, retain) IBInspectable NSString *placeholder; | |
@property (nonatomic, retain) IBInspectable UIColor *placeholderColor; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// RoundedCornersTextView.m | |
// | |
// Created by Maxim Keegan on 03.06.15. | |
// Copyright (c) 2015 Keegan. All rights reserved. | |
// | |
#import "RoundedCornersTextView.h" | |
@interface RoundedCornersTextView () | |
@property (nonatomic, retain) UILabel *placeHolderLabel; | |
@end | |
@implementation RoundedCornersTextView | |
- (void) setCornerRadius:(CGFloat)cornerRadius { | |
_cornerRadius = cornerRadius; | |
if (cornerRadius > 0) { | |
[self setClipsToBounds:YES]; | |
} | |
self.layer.cornerRadius = _cornerRadius; | |
} | |
- (void) setBorderColor:(UIColor *)borderColor { | |
_borderColor = borderColor; | |
self.layer.borderColor = _borderColor.CGColor; | |
} | |
- (void) setBorderWidth:(CGFloat)borderWidth { | |
_borderWidth = borderWidth; | |
self.layer.borderWidth = _borderWidth; | |
} | |
CGFloat const UI_PLACEHOLDER_TEXT_CHANGED_ANIMATION_DURATION = 0.25; | |
- (void)dealloc | |
{ | |
[[NSNotificationCenter defaultCenter] removeObserver:self]; | |
#if __has_feature(objc_arc) | |
#else | |
[_placeHolderLabel release]; _placeHolderLabel = nil; | |
[_placeholderColor release]; _placeholderColor = nil; | |
[_placeholder release]; _placeholder = nil; | |
[super dealloc]; | |
#endif | |
} | |
- (void)awakeFromNib | |
{ | |
[super awakeFromNib]; | |
// Use Interface Builder User Defined Runtime Attributes to set | |
// placeholder and placeholderColor in Interface Builder. | |
if (!self.placeholder) { | |
[self setPlaceholder:@""]; | |
} | |
if (!self.placeholderColor) { | |
[self setPlaceholderColor:[UIColor lightGrayColor]]; | |
} | |
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil]; | |
} | |
- (id)initWithFrame:(CGRect)frame | |
{ | |
if( (self = [super initWithFrame:frame]) ) | |
{ | |
[self setPlaceholder:@""]; | |
[self setPlaceholderColor:[UIColor lightGrayColor]]; | |
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil]; | |
} | |
return self; | |
} | |
- (void)textChanged:(NSNotification *)notification | |
{ | |
if([[self placeholder] length] == 0) | |
{ | |
return; | |
} | |
[UIView animateWithDuration:UI_PLACEHOLDER_TEXT_CHANGED_ANIMATION_DURATION animations:^{ | |
if([[self text] length] == 0) | |
{ | |
[[self viewWithTag:999] setAlpha:1]; | |
} | |
else | |
{ | |
[[self viewWithTag:999] setAlpha:0]; | |
} | |
}]; | |
} | |
- (void)setText:(NSString *)text { | |
[super setText:text]; | |
[self textChanged:nil]; | |
} | |
- (void)drawRect:(CGRect)rect | |
{ | |
if( [[self placeholder] length] > 0 ) | |
{ | |
if (_placeHolderLabel == nil ) | |
{ | |
_placeHolderLabel = [[UILabel alloc] initWithFrame:CGRectMake(8,8,self.bounds.size.width - 16,0)]; | |
_placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping; | |
_placeHolderLabel.numberOfLines = 0; | |
_placeHolderLabel.font = self.font; | |
_placeHolderLabel.backgroundColor = [UIColor clearColor]; | |
_placeHolderLabel.textColor = self.placeholderColor; | |
_placeHolderLabel.alpha = 0; | |
_placeHolderLabel.tag = 999; | |
[self addSubview:_placeHolderLabel]; | |
} | |
_placeHolderLabel.text = self.placeholder; | |
[_placeHolderLabel sizeToFit]; | |
[self sendSubviewToBack:_placeHolderLabel]; | |
} | |
if( [[self text] length] == 0 && [[self placeholder] length] > 0 ) | |
{ | |
[[self viewWithTag:999] setAlpha:1]; | |
} | |
[super drawRect:rect]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment