Skip to content

Commit 27d9a5b

Browse files
authored
Merge pull request #3 from mrhard4/master
Cut tail mode + fix warnings
2 parents 2d281a8 + 2ac109d commit 27d9a5b

8 files changed

Lines changed: 51 additions & 20 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class EntryViewController: UIViewController
2828

2929
self.textFieldFormatCoordinator = FTCTextFieldFormatCoordinator(textField: self.textField)
3030

31-
let formattingConfig = FTCTextEntryFormattingConfigFactory.mobilePhoneConfig(withFormat: "+7 (___) ___-__-__",
31+
let formattingConfig = FTCTextEntryFormattingConfigFactory.mobilePhoneConfig(with: "+7 (___) ___-__-__",
3232
maskChar: "_")
3333
self.textFieldFormatCoordinator.apply(formattingConfig: formattingConfig)
3434
}

Src/Core/FTCTextEntryFormatCoordinatorHelper.m

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,40 +79,40 @@ - (NSString *)formattedValue
7979

8080
- (void)beginEditing
8181
{
82-
[self handleValueChange:^
82+
[self handleValueChange:^(FTCTextEntryFormatCoordinator *coordinator, id<FTCTextEntry> entry)
8383
{
84-
[formatCoordinator beginEditing];
85-
entryUI.text = formatCoordinator.formattedValue;
86-
entryUI.selectedTextRange = formatCoordinator.currentSelectionRangeInFormattedValue;
84+
[coordinator beginEditing];
85+
entry.text = coordinator.formattedValue;
86+
entry.selectedTextRange = coordinator.currentSelectionRangeInFormattedValue;
8787
}];
8888
}
8989

9090
- (void)changeCharactersInRange:(NSRange)range replacement:(NSString *)replacement
9191
{
92-
[self handleValueChange:^
92+
[self handleValueChange:^(FTCTextEntryFormatCoordinator *coordinator, id<FTCTextEntry> entry)
9393
{
94-
[formatCoordinator userReplacedInFormattedValueSubstringAtRange:range withString:replacement];
95-
entryUI.text = formatCoordinator.formattedValue;
96-
entryUI.selectedTextRange = formatCoordinator.currentSelectionRangeInFormattedValue;
94+
[coordinator userReplacedInFormattedValueSubstringAtRange:range withString:replacement];
95+
entry.text = coordinator.formattedValue;
96+
entry.selectedTextRange = coordinator.currentSelectionRangeInFormattedValue;
9797
}];
9898
}
9999

100100
- (void)endEditing
101101
{
102-
[self handleValueChange:^
102+
[self handleValueChange:^(FTCTextEntryFormatCoordinator *coordinator, id<FTCTextEntry> entry)
103103
{
104-
[formatCoordinator endEditing];
105-
entryUI.text = formatCoordinator.formattedValue;
104+
[coordinator endEditing];
105+
entry.text = coordinator.formattedValue;
106106
}];
107107
}
108108

109-
- (void)handleValueChange:(void(^)(void))valueChange
109+
- (void)handleValueChange:(void(^)(FTCTextEntryFormatCoordinator *coordinator, id<FTCTextEntry> entry))valueChange
110110
{
111111
NSString *initialValue = formatCoordinator.rawValue;
112112

113113
if( NULL != valueChange )
114114
{
115-
valueChange();
115+
valueChange(formatCoordinator, entryUI);
116116
}
117117

118118
if( NULL == _didChangeValueHandler )

Src/Core/Formatting/MaskFormatter/FTCMaskFormatter.m

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,18 @@ - (NSString *)formattedFromRaw:(NSString *)rawValue
4848
{
4949
NSString * const mask = config.mask;
5050

51+
if( (FTCMaskFormatterConfigTailModeCutAndForceHead == config.tailMode) && (rawValue.length == 0) )
52+
{
53+
NSString *maskCharacterString = [FTCTextEntryFormattingStringUtils stringWithCharacter:config.maskCharacter];
54+
return [config.mask substringToIndex:[config.mask rangeOfString:maskCharacterString].location];
55+
}
56+
5157
NSMutableString *formattedValue = [[NSMutableString alloc] initWithCapacity:mask.length];
5258

5359
for( NSUInteger indexInFormat = 0, indexInRawValue = 0; indexInFormat < mask.length; ++indexInFormat )
5460
{
55-
if( config.cutTail && indexInRawValue == rawValue.length )
61+
if( ((FTCMaskFormatterConfigTailModeCutAndForceHead == config.tailMode) || (FTCMaskFormatterConfigTailModeCut == config.tailMode))
62+
&& indexInRawValue == rawValue.length )
5663
{
5764
break;
5865
}

Src/Core/Formatting/MaskFormatter/FTCMaskFormatterConfig.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,19 @@
2020

2121
NS_ASSUME_NONNULL_BEGIN
2222

23+
typedef NS_ENUM(NSInteger, FTCMaskFormatterConfigTailMode)
24+
{
25+
FTCMaskFormatterConfigTailModeNone = 0,
26+
FTCMaskFormatterConfigTailModeCut,
27+
FTCMaskFormatterConfigTailModeCutAndForceHead
28+
};
29+
2330
@protocol FTCMaskFormatterConfig<NSObject>
2431

2532
@property (nonatomic, readonly) NSString *mask;
2633
@property (nonatomic, readonly) unichar maskCharacter;
2734
@property (nonatomic, readonly) NSUInteger countMaskCharacters;
28-
@property (nonatomic, readonly) BOOL cutTail;
35+
@property (nonatomic, readonly) FTCMaskFormatterConfigTailMode tailMode;
2936

3037
@end
3138

Src/Core/Formatting/MaskFormatter/FTCMaskFormatterGenericConfig.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ NS_ASSUME_NONNULL_BEGIN
2424

2525
@interface FTCMaskFormatterGenericConfig : NSObject<FTCMaskFormatterConfig>
2626

27-
@property (nonatomic, readwrite) BOOL cutTail; // default NO
27+
@property (nonatomic, readwrite) FTCMaskFormatterConfigTailMode tailMode; // default FTCMaskFormatterConfigTailModeNone
2828

2929
- (instancetype)initWithMask:(NSString *)mask maskCharacter:(NSString *)maskCharacter NS_DESIGNATED_INITIALIZER;
3030

Src/Core/Formatting/MaskFormatter/FTCMaskFormatterGenericConfig.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ - (instancetype)initWithMask:(NSString *)mask maskCharacter:(NSString *)maskChar
3535

3636
_mask = mask;
3737
_maskCharacter = [maskCharacter characterAtIndex:0];
38-
_cutTail = NO;
38+
_tailMode = FTCMaskFormatterConfigTailModeNone;
3939

4040
NSUInteger countMaskCharacters = 0;
4141
for( NSUInteger i = 0; i < _mask.length; ++i )

Src/FTCTextEntryFormattingConfigFactory.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1919
// SOFTWARE.
2020

21+
#import "FTCTextEntryFormatting.h"
22+
2123
NS_ASSUME_NONNULL_BEGIN
2224

2325
@class FTCTextEntryFormattingConfig;
@@ -26,6 +28,9 @@ NS_ASSUME_NONNULL_BEGIN
2628

2729
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithMask:(NSString *)mask
2830
maskChar:(NSString *)maskChar NS_SWIFT_NAME( mobilePhoneConfig(with:maskChar:) );
31+
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithMask:(NSString *)mask
32+
maskChar:(NSString *)maskChar
33+
tailMode:(FTCMaskFormatterConfigTailMode)tailMode NS_SWIFT_NAME( mobilePhoneConfig(with:maskChar:tailMode:) );
2934

3035
+ (FTCTextEntryFormattingConfig *)moneyConfigWithCurrency:(nullable NSString *)currency
3136
onlyIntegral:(BOOL)onlyIntegral NS_SWIFT_NAME( moneyConfig(with:onlyIntegral:) );

Src/FTCTextEntryFormattingConfigFactory.m

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,26 @@
3333
@implementation FTCTextEntryFormattingConfigFactory
3434

3535
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithMask:(NSString *)mask maskChar:(NSString *)maskChar
36+
{
37+
return [self mobilePhoneConfigWithMask:mask maskChar:maskChar tailMode:FTCMaskFormatterConfigTailModeNone];
38+
}
39+
40+
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithMask:(NSString *)mask maskChar:(NSString *)maskChar tailMode:(FTCMaskFormatterConfigTailMode)tailMode
3641
{
3742
__auto_type maskConfig = [[FTCMaskFormatterGenericConfig alloc] initWithMask:mask maskCharacter:maskChar];
43+
maskConfig.tailMode = tailMode;
3844

3945
__auto_type maskFormatter = [[FTCMaskFormatter alloc] initWithConfig:maskConfig];
4046
__auto_type inputFilter = [[FTCDigitsValueFilter alloc] initWithMaxLength:maskConfig.countMaskCharacters];
4147

42-
return [[FTCTextEntryFormattingConfig alloc] initWithFormatter:maskFormatter
43-
inputFilter:inputFilter];
48+
__auto_type formattingConfig = [[FTCTextEntryFormattingConfig alloc] init];
49+
50+
formattingConfig.editingInputFilter = inputFilter;
51+
formattingConfig.editingFormatter = maskFormatter;
52+
formattingConfig.notEditingInputFilter = inputFilter;
53+
formattingConfig.notEditingFormatter = maskFormatter;
54+
55+
return formattingConfig;
4456
}
4557

4658
+ (FTCTextEntryFormattingConfig *)moneyConfigWithCurrency:(nullable NSString *)currency onlyIntegral:(BOOL)onlyIntegral

0 commit comments

Comments
 (0)