From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001 From: 单军华 Date: Wed, 11 Jul 2018 10:47:42 +0800 Subject: [PATCH] 首次上传 --- screendisplay/screendisplay/Classes/Base/BaseControllers/LMJTextViewController.m | 245 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 245 insertions(+), 0 deletions(-) diff --git a/screendisplay/screendisplay/Classes/Base/BaseControllers/LMJTextViewController.m b/screendisplay/screendisplay/Classes/Base/BaseControllers/LMJTextViewController.m new file mode 100755 index 0000000..bcbe3e6 --- /dev/null +++ b/screendisplay/screendisplay/Classes/Base/BaseControllers/LMJTextViewController.m @@ -0,0 +1,245 @@ +// +// LMJTextViewController.m +// PLMMPRJK +// +// Created by windshan on 2017/4/26. +// Copyright �� 2017��� GoMePrjk. All rights reserved. +// + +#import "LMJTextViewController.h" +#import "IQUIView+Hierarchy.h" +#import "IQKeyboardManager.h" +#import "IQKeyboardReturnKeyHandler.h" + +@interface LMJTextViewController () +/** <#digest#> */ +@property (nonatomic, strong) NSArray<UITextField *> *requiredTextFields; + +/** <#digest#> */ +@property (nonatomic, strong) IQKeyboardReturnKeyHandler *returnKeyHandler; + +@end + +@implementation LMJTextViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + [self initKeyboard]; +} + + +- (void)viewDidLayoutSubviews +{ + [super viewDidLayoutSubviews]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + [self.view endEditing:YES]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + if (_returnKeyHandler) { + [_returnKeyHandler setDelegate:nil]; + _returnKeyHandler = nil; + } +} + +#pragma mark - UITextViewDelegate, UITextFieldDelegate + +#pragma mark - ������ returnKey +- (BOOL)textFieldShouldReturn:(UITextField *)textField +{ + if (![IQKeyboardManager sharedManager].canGoNext) { + [self textViewController:self inputViewDone:textField]; + } + return YES; +} + +- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { + if (![IQKeyboardManager sharedManager].canGoNext && [text isEqualToString:@"\n"]) { + [self textViewController:self inputViewDone:textView]; + } + return YES; +} + +#pragma mark - LMJTextViewControllerDelegate +- (void)textViewController:(LMJTextViewController *)textViewController inputViewDone:(id)inputView +{ + NSLog(@"%@, %@", self.requiredTextFields, inputView); +} + +#pragma mark - autoEmpty + +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + // ��������� bug fix + if ([@"������������������������" rangeOfString:string].location != NSNotFound) { + return YES; + } + NSString *current = [textField.text stringByReplacingCharactersInRange:range withString:string.stringByTrim].stringByTrim; + + if (textField.isEmptyAutoEnable && (TWIsEmpty(textField.text.stringByTrim) || TWIsEmpty(current))) { + if (TWIsEmpty(current)) { + [self checkIsEmpty:YES textField:textField]; + }else + { + [self checkIsEmpty:NO textField:textField]; + } + } + + return YES; +} + +- (BOOL)textFieldShouldClear:(UITextField *)textField +{ + if (textField.isEmptyAutoEnable) { + [self checkIsEmpty:YES textField:textField]; + } + return YES; +} + + +#pragma mark - ������ btn��� enable +- (void)checkIsEmpty:(BOOL)isEmpty textField:(UITextField *)textField +{ + if (TWIsEmpty(self.requiredTextFields)) { + return; + } + + if ([self respondsToSelector:@selector(textViewControllerRelationButtons:)]) { + if (TWIsEmpty([self textViewControllerRelationButtons:self])) { + return; + } + }else + { + return; + } + + __block BOOL isButtonEnabled = !isEmpty; + + if (!isEmpty) { + [self.requiredTextFields enumerateObjectsUsingBlock:^(UITextField *obj, NSUInteger idx, BOOL * _Nonnull stop) { + if (obj != textField && TWIsEmpty(obj.text.stringByTrim)) { + isButtonEnabled = NO; + *stop = YES; + } + }]; + } + + [[self textViewControllerRelationButtons:self] enumerateObjectsUsingBlock:^(UIButton * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + obj.enabled = isButtonEnabled; + }]; +} + + + +#pragma mark - ��������� +- (void)initKeyboard +{ + // ������ + IQKeyboardManager *manager = [IQKeyboardManager sharedManager]; + manager.enable = YES; + manager.shouldResignOnTouchOutside = YES; + manager.shouldToolbarUsesTextFieldTintColor = YES; + manager.enableAutoToolbar = [self textViewControllerEnableAutoToolbar:self]; + manager.shouldPlayInputClicks = YES; + manager.shouldShowToolbarPlaceholder = YES; + + [self requiredTextFields]; + [self initReturnKeyHandler];; +} + + + +#pragma mark - LMJTextViewControllerDataSource + +- (BOOL)textViewControllerEnableAutoToolbar:(LMJTextViewController *)textViewController +{ + return YES; +} + +- (UIReturnKeyType)textViewControllerLastReturnKeyType:(LMJTextViewController *)textViewController +{ + return UIReturnKeyDone; +} + + +- (NSArray<UITextField *> *)requiredTextFields +{ + if(_requiredTextFields == nil) + { + NSArray *responsedInputViews = [self.view deepResponderViews]; + NSMutableArray<UITextField *> *array = [NSMutableArray array]; + [responsedInputViews enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + + if ([obj isKindOfClass:[UITextField class]]) { + + UITextField *field = (UITextField *)obj; + field.delegate = self; + + if (field.isEmptyAutoEnable) { + [array addObject:field]; + } + } + + if ([obj isKindOfClass:[UITextView class]]) { + UITextView *textView = (UITextView *)obj; + textView.delegate = self; + } + }]; + + _requiredTextFields = array; + } + return _requiredTextFields; +} + + +- (void)initReturnKeyHandler { + + if(_returnKeyHandler == nil) { + _returnKeyHandler = [[IQKeyboardReturnKeyHandler alloc] initWithViewController:self]; + _returnKeyHandler.delegate = self; + _returnKeyHandler.lastTextFieldReturnKeyType = [self textViewControllerLastReturnKeyType:self]; + } +} + + +- (void)dealloc +{ + _returnKeyHandler = nil; +} + +@end + + + +#pragma mark - LMJTextViewControllerTextField + +static void *isEmptyAutoEnableKey = &isEmptyAutoEnableKey; +@implementation UITextField (LMJTextViewController) + +- (void)setIsEmptyAutoEnable:(BOOL)isEmptyAutoEnable +{ + [self setAssociateValue:@(isEmptyAutoEnable) withKey:isEmptyAutoEnableKey]; +} + +- (BOOL)isEmptyAutoEnable +{ + return [(NSNumber *)[self getAssociatedValueForKey:isEmptyAutoEnableKey] boolValue]; +} +@end + +@implementation LMJTextViewControllerTextField +- (NSString *)text { + return ([[super text] stringByTrim]); +} +@end -- Gitblit v1.8.0