JLChen
2021-08-02 38f4fb064df09f344fc3237409c76a9fba2a8a9e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
 * Copyright (c) 2010-2020 Belledonne Communications SARL.
 *
 * This file is part of linphone-iphone
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
 
#import "UIAssistantTextField.h"
#import "Utils.h"
 
@implementation UIAssistantTextField
 
INIT_WITH_COMMON_CF {
    self.delegate = self;
    self.enabled = self.isEnabled; //force refresh bg color
    return self;
}
 
- (void)showError:(NSString *)msg {
    _errorLabel.text = msg;
    _lastText = self.text;
 
    _errorLabel.hidden = NO;
    self.layer.borderWidth = .8;
    self.layer.cornerRadius = 4.f;
    self.autoresizingMask = YES;
    self.layer.borderColor = _errorLabel.hidden ? [[UIColor clearColor] CGColor] : [[UIColor redColor] CGColor];
}
 
- (void)showError:(NSString *)msg when:(DisplayErrorPred)apred {
    _showErrorPredicate = apred;
    [self showError:msg];
    [self checkDisplayError];
}
 
- (void)checkDisplayError {
    _errorLabel.hidden = !(_canShowError && [self isInvalid]);
    self.layer.borderColor = _errorLabel.hidden ? [[UIColor clearColor] CGColor] : [[UIColor redColor] CGColor];
}
 
- (BOOL)isVisible {
    UIView* aview = self;
    while (aview) {
        if (aview.isHidden || !aview.isUserInteractionEnabled) return NO;
        aview = aview.superview;
    }
    return YES;
}
 
- (BOOL)isInvalid {
    return self.isVisible && _showErrorPredicate && _showErrorPredicate(_lastText);
}
 
- (void)setEnabled:(BOOL)enabled {
    [super setEnabled:enabled];
    self.backgroundColor = [self.backgroundColor colorWithAlphaComponent:enabled?1:0.3];
}
 
#pragma mark - UITextFieldDelegate Functions
 
- (BOOL)textField:(UITextField *)textField
    shouldChangeCharactersInRange:(NSRange)range
                replacementString:(NSString *)string {
    // we must not show any error until user typed at least one character
    _canShowError |= (string.length > 0);
    _lastText = [textField.text stringByReplacingCharactersInRange:range withString:string];
    [self checkDisplayError];
    return YES;
}
 
- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if (self.nextFieldResponder && !self.nextFieldResponder.hidden) {
        self.returnKeyType = UIReturnKeyNext;
    } else {
        self.returnKeyType = UIReturnKeyDone;
    }
 
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
    _lastText = textField.text;
    [self checkDisplayError];
}
 
@end