| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- //
- // CustomTextView.m
- // JasonDevelop
- //
- // Created by Jason Lee on 10/26/14.
- // Copyright (c) jasondevelop. All rights reserved.
- //
- #import "NSString-Addtions.h"
- #import "CommonUtil.h"
- #import "CustomTextView.h"
- #import "ImageUtil.h"
- #define kUIBtnTintColor [UIColor whiteColor]
- #define kfBoxCap 4.0f
- #define kUIPlaceHolderColor RGBCOLOR(204.0f, 204.0f, 204.0f)
- @interface CustomTextView () {
- @protected
- UIView *_targetSuperView;
- CGRect _cRect;
- CGRect _superRect;
- CGPoint _contentOffset;
- CGFloat _marginTop, _naviMargin, _adjustY;
- UIBarButtonItem *_btnPrev, *_btnNext, *_btnClose;
- UIToolbar *_toolBar;
- NSMutableArray *_barItems;
- UIBarButtonItem *_btnFlexibleSpace;
- UIEdgeInsets _bgInsets;
- BOOL _isSecureEntry;
- UIImage *_bgImage;
- }
- @end
- @implementation CustomTextView
- @dynamic delegate;
- - (id)initWithFrame:(CGRect)frame {
- if (self = [super initWithFrame:frame]) {
- _customTextViewSuperview = CustomTextViewSuperviewIsViewController;
- self.inputAccessoryView = [self generateAccessoryView];
- _bgImageName = @"tp_01_img_input_bg_01";
- UIImage *bgImage = [UIImage imageNamed:_bgImageName];
- if (bgImage) {
- _bgInsets = UIEdgeInsetsMake(kfBoxCap, kfBoxCap, kfBoxCap, kfBoxCap);
- bgImage = [ImageUtil resizableImageWithCapInsets:_bgInsets resizingMode:UIImageResizingModeStretch img:bgImage];
- // [self setBackground:bgImage];
- }
- _cRect = self.frame;
- }
- return self;
- }
- - (void)awakeFromNib {
- _customTextViewSuperview = CustomTextViewSuperviewIsViewController;
- self.inputAccessoryView = [self generateAccessoryView];
- _bgImageName = _bgImageName && ![_bgImageName isEmptyString] ? _bgImageName : @"tp_01_img_input_bg_01";
- _bgImage = [UIImage imageNamed:_bgImageName];
- if (_bgImage) {
- if (!CGRectEqualToRect(_rectForCapBackground, CGRectZero)) {//rectForCap이 설정된 경우, 이미지를 리사이즈함.
- CGFloat top, left, bottom, right;
- top = CGRectGetMinY(_rectForCapBackground);
- left = CGRectGetMinX(_rectForCapBackground);
- bottom = CGRectGetHeight(_rectForCapBackground);
- right = CGRectGetWidth(_rectForCapBackground);
- _bgInsets = UIEdgeInsetsMake(top, left, bottom, right);
- } else {
- _bgInsets = UIEdgeInsetsMake(kfBoxCap, kfBoxCap, kfBoxCap, kfBoxCap);
- }
- _bgImage = [ImageUtil resizableImageWithCapInsets:_bgInsets resizingMode:UIImageResizingModeStretch img:_bgImage];
- }
- _cRect = self.frame;
- if (_placeHolder) {
- self.text = _placeHolder;
- }
- #ifdef DEBUG
- NSString *identifier = [NSString stringWithFormat:@"%@", self.placeHolder];
- [self setValue:identifier forKey:@"layoutDebuggingIdentifier"];
- #endif
- self.textContainerInset = UIEdgeInsetsMake(25.0f, 20.0f, 25.0f, 20.0f);
- }
- - (void)drawRect:(CGRect)rect {
- _bgImage = [ImageUtil resizableImageWithCapInsets:_bgInsets resizingMode:UIImageResizingModeStretch img:_bgImage];
- [_bgImage drawInRect:rect];
- self.textColor = [self.text isEqualToString:_placeHolder] ? self.placeHolderColor : self.textColor;
- }
- - (UIView *)generateAccessoryView {
- CGFloat width = [UIScreen mainScreen].bounds.size.width;
- _toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, width, 44.0)];
- _toolBar.barStyle = UIBarStyleBlack;
- _toolBar.translucent = YES;
- _barItems = [NSMutableArray new];
- _btnFlexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
- _btnPrev = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"이전", @"이전")
- style:UIBarButtonItemStylePlain
- target:self
- action:@selector(goPrevField:)];
- _btnNext = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"다음", @"다음")
- style:UIBarButtonItemStylePlain
- target:self
- action:@selector(goNextField:)];
- _btnClose = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"닫기", @"닫기")
- style:UIBarButtonItemStylePlain
- target:self
- action:@selector(hideKeyboard:)];
- if (IOS_VERSION >= 7.0f) {
- _btnClose.tintColor = kUIBtnTintColor;
- _btnPrev.tintColor = kUIBtnTintColor;
- _btnNext.tintColor = kUIBtnTintColor;
- }
- [_barItems addObject:_btnFlexibleSpace];
- [_barItems addObject:_btnClose];
- [_toolBar setItems:_barItems animated:YES];
- return _toolBar;
- }
- - (void)setCustomTextViewMove:(CustomTextViewMove)customTextViewMove {
- [_barItems removeAllObjects];
- switch (customTextViewMove) {
- case CustomTextViewMovePrev:
- _btnNext.enabled = NO;
- [_barItems addObject:_btnPrev];
- [_barItems addObject:_btnNext];
- [_barItems addObject:_btnFlexibleSpace];
- [_barItems addObject:_btnClose];
- break;
- case CustomTextViewMoveNext:
- _btnPrev.enabled = NO;
- [_barItems addObject:_btnPrev];
- [_barItems addObject:_btnNext];
- [_barItems addObject:_btnFlexibleSpace];
- [_barItems addObject:_btnClose];
- break;
- case CustomTextVoewMoveBoth:
- [_barItems addObject:_btnPrev];
- [_barItems addObject:_btnNext];
- [_barItems addObject:_btnFlexibleSpace];
- [_barItems addObject:_btnClose];
- break;
- default:
- break;
- }
- [_toolBar setItems:_barItems animated:YES];
- }
- - (BOOL)becomeFirstResponder {
- if ([_placeHolder isEqualToString:self.text]) {
- self.text = ksEmptyString;
- }
- _bgImage = _bgPressImageName && ![_bgPressImageName isEmptyString] ? [UIImage imageNamed:_bgPressImageName] : _bgImage;
- [self setNeedsDisplay];
- if (_autoScrollUp) {
- // if (_customTextViewSuperview == CustomTextViewSuperviewIsView) {
- // _targetSuperView = self.superview;
- // } else if (_customTextViewSuperview == CustomTextViewSuperviewIsViewController) {
- // UIViewController *vc = [AOTFacade facade].currentViewController;
- // _targetSuperView = vc.view;
- // } else if (_customTextViewSuperview == CustomTextViewSuperviewIsPopup) {
- // _targetSuperView = self.superview.superview;
- // }
- CGFloat naviMargin = 20.0f;
- if (_customTextViewSuperview == CustomTextViewSuperviewIsViewController) {
- UIViewController *vc = [CommonUtil currentViewController];
- _targetSuperView = vc.view;
- } else if (_customTextViewSuperview == CustomTextViewSuperviewIsPopup) {
- _targetSuperView = self.superview.superview;
- } else if (_customTextViewSuperview == CustomTextViewSuperviewIsPopupContentView) {
- _targetSuperView = self.superview.superview.superview;
- } else if (_customTextViewSuperview == CustomTextViewSuperviewIsContentView) {
- _targetSuperView = self.superview.superview.superview;
- naviMargin = 85.0f;
- }
- CGRect selfRect = self.frame;
- if (CGRectEqualToRect(_superRect, CGRectZero)) {
- _superRect = _targetSuperView.frame;
- }
- CGRect cr = [self.superview convertRect:selfRect toView:_targetSuperView];
- CGFloat cy = (cr.origin.y + cr.size.height);
- CGFloat ky = ([UIScreen mainScreen].bounds.size.height - naviMargin) - (PORTRAIT_KEYBOARD_HEIGHT + KEYBOARD_ACCESSORY_HEIGHT); // 260
- if (cy >= ky) {
- CGRect scrollRect = _targetSuperView.frame;
- scrollRect.origin.y = ky - cy;
- [UIView animateWithDuration:kfAnimationDur animations:^{
- if ([_targetSuperView isKindOfClass:[UIScrollView class]]) {
- [(UIScrollView *)_targetSuperView setContentOffset:CGPointMake(0, cy - ky) animated:NO];
- } else {
- _targetSuperView.frame = scrollRect;
- }
- }];
- } else {
- if (!CGRectEqualToRect(_superRect, CGRectZero)) {
- [UIView animateWithDuration:kfAnimationDur animations:^{
- _targetSuperView.frame = _superRect;
- }];
- }
- }
- }
- return [super becomeFirstResponder];
- }
- - (BOOL)resignFirstResponder {
- // NSLog(@"%@, resignFirstResponder", self);
- if ([self.text isEqualToString:ksEmptyString]) {
- self.text = _placeHolder;
- }
- _bgImage = _bgImageName && ![_bgImageName isEmptyString] ? [UIImage imageNamed:_bgImageName] : [UIImage imageNamed:@"input_wh"];
- [self setNeedsDisplay];
- if (_autoScrollUp) {
- if (_customTextViewSuperview == CustomTextViewSuperviewIsViewController) {
- UIViewController *vc = [CommonUtil currentViewController];
- _targetSuperView = vc.view;
- } else if (_customTextViewSuperview == CustomTextViewSuperviewIsPopup) {
- _targetSuperView = self.superview.superview;
- }
- [UIView animateWithDuration:kfAnimationDur animations:^{
- if (!CGRectIsEmpty(_superRect)) {
- _targetSuperView.frame = _superRect;
- }
- }];
- }
- return [super resignFirstResponder];
- }
- - (void)goPrevField:(id)sender {
- [self resignFirstResponder];
- if ([self.delegate respondsToSelector:@selector(moveToPrevField:)]) {
- [self.delegate moveToPrevField:self];
- }
- }
- - (void)goNextField:(id)sender {
- [self resignFirstResponder];
- if ([self.delegate respondsToSelector:@selector(moveToNextField:)]) {
- [self.delegate moveToNextField:self];
- }
- }
- - (void)hideKeyboard:(id)sender {
- [self resignFirstResponder];
- if ([self.delegate respondsToSelector:@selector(willHideKeyboard:)]) {
- [self.delegate willHideKeyboard:self];
- }
- }
- //-(void)textViewDidChange:(UITextView *)textView {
- // // Enable and disable lblPlaceHolderText
- // if ([textView.text length] > 0) {
- // [textView setBackgroundColor:[UIColor whiteColor]];
- //// [lblPlaceHolderText setHidden:YES];
- // } else {
- // [textView setBackgroundColor:[UIColor clearColor]];
- //// [lblPlaceHolderText setHidden:NO];
- // }
- //}
- @end
|