生活随笔
收集整理的這篇文章主要介紹了
iOS实现经典登录页面,手机号自动格式化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
iOS實現經典登錄頁面,手機號自動格式化
核心
#define RGB(r,g,b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]@implementation LJPhoneTextField
- (instancetype
)initWithFrame
:(CGRect
)frame
{self = [super initWithFrame
:frame
];if (self) {self.leftViewMode
= UITextFieldViewModeAlways
;self.clearButtonMode
= UITextFieldViewModeWhileEditing
;self.backgroundColor
= [UIColor whiteColor
];self.textColor
= RGB(51,51,51);[self addTarget
:self action
:@selector(reformatAsPhoneNumber
:) forControlEvents
:UIControlEventEditingChanged
];}return self;
}
- (instancetype
)initWithCoder
:(NSCoder
*)coder
{self = [super initWithCoder
:coder
];if (self) {[self addTarget
:self action
:@selector(reformatAsPhoneNumber
:) forControlEvents
:UIControlEventEditingChanged
];}return self;
}
-(void)reformatAsPhoneNumber
:(UITextField
*)textField
{NSUInteger targetCursorPostion
= [textField offsetFromPosition
:textField
.beginningOfDocument toPosition
:textField
.selectedTextRange
.start
];NSString
*phoneNumberWithoutSpaces
= [self removeNonDigits
:textField
.text andPreserveCursorPosition
:&targetCursorPostion
];if([phoneNumberWithoutSpaces length
]>11) {[textField setText
:_previousTextFieldContent
];textField
.selectedTextRange
= _previousSelection
;return;}NSString
*phoneNumberWithSpaces
= [self insertSpacesEveryFourDigitsIntoString
:phoneNumberWithoutSpaces andPreserveCursorPosition
:&targetCursorPostion
];textField
.text
= phoneNumberWithSpaces
;UITextPosition
*targetPostion
= [textField positionFromPosition
:textField
.beginningOfDocument offset
:targetCursorPostion
];[textField setSelectedTextRange
:[textField textRangeFromPosition
:targetPostion toPosition
:targetPostion
]];}
- (NSString
*)removeNonDigits
:(NSString
*)string andPreserveCursorPosition
:(NSUInteger
*)cursorPosition
{NSUInteger originalCursorPosition
=*cursorPosition
;NSMutableString
*digitsOnlyString
= [NSMutableString new
];for (NSUInteger i
=0; i
<string
.length
; i
++) {unichar characterToAdd
= [string characterAtIndex
:i
];if(isdigit(characterToAdd
)) {NSString
*stringToAdd
= [NSString stringWithCharacters
:&characterToAdd length
:1];[digitsOnlyString appendString
:stringToAdd
];}else {if(i
<originalCursorPosition
) {(*cursorPosition
)--;}}}return digitsOnlyString
;
}
- (NSString
*)insertSpacesEveryFourDigitsIntoString
:(NSString
*)string andPreserveCursorPosition
:(NSUInteger
*)cursorPosition
{NSMutableString
*stringWithAddedSpaces
= [NSMutableString new
];NSUInteger cursorPositionInSpacelessString
= *cursorPosition
;for (NSUInteger i
=0; i
<string
.length
; i
++) {if(i
>0){if(i
==3 || i
==7) {[stringWithAddedSpaces appendString
:@" "];if(i
<cursorPositionInSpacelessString
) {(*cursorPosition
)++;}}}unichar characterToAdd
= [string characterAtIndex
:i
];NSString
*stringToAdd
= [NSString stringWithCharacters
:&characterToAdd length
:1];[stringWithAddedSpaces appendString
:stringToAdd
];}return stringWithAddedSpaces
;
}#pragma mark - UITextFieldDelegate
-(BOOL
)textField
:(UITextField
*)textField shouldChangeCharactersInRange
:(NSRange
)range replacementString
:(NSString
*)string
{_previousSelection
= textField
.selectedTextRange
;_previousTextFieldContent
= textField
.text
;if(range
.location
==0) {if(string
.integerValue
>1){return NO
;}}return YES
;
}@end
開源地址
https://gitee.com/johnson__save_admin/ljphone-text-field
總結
以上是生活随笔為你收集整理的iOS实现经典登录页面,手机号自动格式化的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。