//
|
// 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
|