Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
galaxy-iOS
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mobile-group
galaxy-iOS
Commits
520a6c39
Commit
520a6c39
authored
Dec 27, 2023
by
David黄金龙
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of
http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS
into develop
parents
5e6d6c62
0905ace5
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
507 additions
and
5 deletions
+507
-5
Podfile
galaxy/Podfile
+1
-0
project.pbxproj
galaxy/galaxy.xcodeproj/project.pbxproj
+20
-0
galaxy-Bridge-Header.h
galaxy/galaxy/Classes/Others/galaxy-Bridge-Header.h
+3
-0
YHMyViewController.swift
galaxy/galaxy/Modules/Mine(我的)/C/YHMyViewController.swift
+19
-5
YHSMSCodeInputView.h
galaxy/galaxy/Modules/Mine(我的)/V/验证码输入框/YHSMSCodeInputView.h
+34
-0
YHSMSCodeInputView.m
galaxy/galaxy/Modules/Mine(我的)/V/验证码输入框/YHSMSCodeInputView.m
+258
-0
YHSMSCodeView.h
galaxy/galaxy/Modules/Mine(我的)/V/验证码输入框/YHSMSCodeView.h
+23
-0
YHSMSCodeView.m
galaxy/galaxy/Modules/Mine(我的)/V/验证码输入框/YHSMSCodeView.m
+149
-0
No files found.
galaxy/Podfile
View file @
520a6c39
...
@@ -15,6 +15,7 @@ target 'galaxy' do
...
@@ -15,6 +15,7 @@ target 'galaxy' do
pod
'Kingfisher'
,
'7.10.1'
pod
'Kingfisher'
,
'7.10.1'
#异步编程框架
#异步编程框架
pod
'RxSwift'
,
'6.6.0'
pod
'RxSwift'
,
'6.6.0'
pod
'RxCocoa'
,
'6.6.0'
#数据存储
#数据存储
pod
'SwiftyUserDefaults'
,
'5.3.0'
pod
'SwiftyUserDefaults'
,
'5.3.0'
#数据加、解密
#数据加、解密
...
...
galaxy/galaxy.xcodeproj/project.pbxproj
View file @
520a6c39
...
@@ -9,6 +9,8 @@
...
@@ -9,6 +9,8 @@
/* Begin PBXBuildFile section */
/* Begin PBXBuildFile section */
04F526AF2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04F526AE2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift */
;
};
04F526AF2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04F526AE2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift */
;
};
04F526C12B3A657000FC6CE6
/* YHValidateCodeInputView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04F526C02B3A657000FC6CE6
/* YHValidateCodeInputView.swift */
;
};
04F526C12B3A657000FC6CE6
/* YHValidateCodeInputView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04F526C02B3A657000FC6CE6
/* YHValidateCodeInputView.swift */
;
};
04F526C72B3BB94200FC6CE6
/* YHSMSCodeInputView.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04F526C32B3BB94200FC6CE6
/* YHSMSCodeInputView.m */
;
};
04F526C82B3BB94200FC6CE6
/* YHSMSCodeView.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04F526C42B3BB94200FC6CE6
/* YHSMSCodeView.m */
;
};
04FAC5432B32BA5F00D24B36
/* YHHomeViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04FAC5422B32BA5F00D24B36
/* YHHomeViewController.swift */
;
};
04FAC5432B32BA5F00D24B36
/* YHHomeViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04FAC5422B32BA5F00D24B36
/* YHHomeViewController.swift */
;
};
04FAC5452B32BA7000D24B36
/* YHMyViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04FAC5442B32BA7000D24B36
/* YHMyViewController.swift */
;
};
04FAC5452B32BA7000D24B36
/* YHMyViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04FAC5442B32BA7000D24B36
/* YHMyViewController.swift */
;
};
04FAC54A2B32CF1000D24B36
/* YHNetRequest.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04FAC5492B32CF1000D24B36
/* YHNetRequest.swift */
;
};
04FAC54A2B32CF1000D24B36
/* YHNetRequest.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04FAC5492B32CF1000D24B36
/* YHNetRequest.swift */
;
};
...
@@ -80,6 +82,10 @@
...
@@ -80,6 +82,10 @@
04F526AE2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHPersonalCenterCell.swift
;
sourceTree
=
"<group>"
;
};
04F526AE2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHPersonalCenterCell.swift
;
sourceTree
=
"<group>"
;
};
04F526BF2B39733000FC6CE6
/* galaxy-Bridge-Header.h */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
"galaxy-Bridge-Header.h"
;
sourceTree
=
"<group>"
;
};
04F526BF2B39733000FC6CE6
/* galaxy-Bridge-Header.h */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
"galaxy-Bridge-Header.h"
;
sourceTree
=
"<group>"
;
};
04F526C02B3A657000FC6CE6
/* YHValidateCodeInputView.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHValidateCodeInputView.swift
;
sourceTree
=
"<group>"
;
};
04F526C02B3A657000FC6CE6
/* YHValidateCodeInputView.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHValidateCodeInputView.swift
;
sourceTree
=
"<group>"
;
};
04F526C32B3BB94200FC6CE6
/* YHSMSCodeInputView.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
YHSMSCodeInputView.m
;
sourceTree
=
"<group>"
;
};
04F526C42B3BB94200FC6CE6
/* YHSMSCodeView.m */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
YHSMSCodeView.m
;
sourceTree
=
"<group>"
;
};
04F526C52B3BB94200FC6CE6
/* YHSMSCodeInputView.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
YHSMSCodeInputView.h
;
sourceTree
=
"<group>"
;
};
04F526C62B3BB94200FC6CE6
/* YHSMSCodeView.h */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
YHSMSCodeView.h
;
sourceTree
=
"<group>"
;
};
04FAC5422B32BA5F00D24B36
/* YHHomeViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHHomeViewController.swift
;
sourceTree
=
"<group>"
;
};
04FAC5422B32BA5F00D24B36
/* YHHomeViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHHomeViewController.swift
;
sourceTree
=
"<group>"
;
};
04FAC5442B32BA7000D24B36
/* YHMyViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHMyViewController.swift
;
sourceTree
=
"<group>"
;
};
04FAC5442B32BA7000D24B36
/* YHMyViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHMyViewController.swift
;
sourceTree
=
"<group>"
;
};
04FAC5492B32CF1000D24B36
/* YHNetRequest.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHNetRequest.swift
;
sourceTree
=
"<group>"
;
};
04FAC5492B32CF1000D24B36
/* YHNetRequest.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHNetRequest.swift
;
sourceTree
=
"<group>"
;
};
...
@@ -165,6 +171,7 @@
...
@@ -165,6 +171,7 @@
04F526A92B32D3D500FC6CE6
/* V */
=
{
04F526A92B32D3D500FC6CE6
/* V */
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
04F526C22B3BB94200FC6CE6
/* 验证码输入框 */
,
04F526AE2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift */
,
04F526AE2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift */
,
04F526C02B3A657000FC6CE6
/* YHValidateCodeInputView.swift */
,
04F526C02B3A657000FC6CE6
/* YHValidateCodeInputView.swift */
,
04FAC5502B3ABA5000D24B36
/* YHLoginStyleButton.swift */
,
04FAC5502B3ABA5000D24B36
/* YHLoginStyleButton.swift */
,
...
@@ -181,6 +188,17 @@
...
@@ -181,6 +188,17 @@
path
=
Others
;
path
=
Others
;
sourceTree
=
"<group>"
;
sourceTree
=
"<group>"
;
};
};
04F526C22B3BB94200FC6CE6
/* 验证码输入框 */
=
{
isa
=
PBXGroup
;
children
=
(
04F526C32B3BB94200FC6CE6
/* YHSMSCodeInputView.m */
,
04F526C42B3BB94200FC6CE6
/* YHSMSCodeView.m */
,
04F526C52B3BB94200FC6CE6
/* YHSMSCodeInputView.h */
,
04F526C62B3BB94200FC6CE6
/* YHSMSCodeView.h */
,
);
path
=
"验证码输入框"
;
sourceTree
=
"<group>"
;
};
04FAC53B2B32B8F100D24B36
/* Modules */
=
{
04FAC53B2B32B8F100D24B36
/* Modules */
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
...
@@ -632,6 +650,7 @@
...
@@ -632,6 +650,7 @@
A52DF0CE2B330A20006618D6
/* BsOverlayView.swift in Sources */
,
A52DF0CE2B330A20006618D6
/* BsOverlayView.swift in Sources */
,
A52DF0C92B330A20006618D6
/* AlignedCollectionViewFlowLayout.swift in Sources */
,
A52DF0C92B330A20006618D6
/* AlignedCollectionViewFlowLayout.swift in Sources */
,
A52DF0BC2B330A20006618D6
/* YHNetworkStatusManager.swift in Sources */
,
A52DF0BC2B330A20006618D6
/* YHNetworkStatusManager.swift in Sources */
,
04F526C72B3BB94200FC6CE6
/* YHSMSCodeInputView.m in Sources */
,
A52DF0CA2B330A20006618D6
/* UIViewController+Navigation.swift in Sources */
,
A52DF0CA2B330A20006618D6
/* UIViewController+Navigation.swift in Sources */
,
04FAC5532B3AC6F200D24B36
/* YHLoginPrivacyView.swift in Sources */
,
04FAC5532B3AC6F200D24B36
/* YHLoginPrivacyView.swift in Sources */
,
04FAC54F2B3AA6EC00D24B36
/* YHLoginViewController.swift in Sources */
,
04FAC54F2B3AA6EC00D24B36
/* YHLoginViewController.swift in Sources */
,
...
@@ -649,6 +668,7 @@
...
@@ -649,6 +668,7 @@
A52DF24A2B33177F006618D6
/* BsHUDContainerView.swift in Sources */
,
A52DF24A2B33177F006618D6
/* BsHUDContainerView.swift in Sources */
,
A52DF0BD2B330A20006618D6
/* YHBaseUrlManager.swift in Sources */
,
A52DF0BD2B330A20006618D6
/* YHBaseUrlManager.swift in Sources */
,
04FAC54D2B3A9E3D00D24B36
/* YHConfig.swift in Sources */
,
04FAC54D2B3A9E3D00D24B36
/* YHConfig.swift in Sources */
,
04F526C82B3BB94200FC6CE6
/* YHSMSCodeView.m in Sources */
,
04F526AF2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift in Sources */
,
04F526AF2B32D4B600FC6CE6
/* YHPersonalCenterCell.swift in Sources */
,
A52DF23B2B330A21006618D6
/* YHNoDataTipView.swift in Sources */
,
A52DF23B2B330A21006618D6
/* YHNoDataTipView.swift in Sources */
,
A52DF23F2B3316A0006618D6
/* YHBasicContentView.swift in Sources */
,
A52DF23F2B3316A0006618D6
/* YHBasicContentView.swift in Sources */
,
...
...
galaxy/galaxy/Classes/Others/galaxy-Bridge-Header.h
View file @
520a6c39
...
@@ -8,5 +8,8 @@
...
@@ -8,5 +8,8 @@
#ifndef galaxy_Bridge_Header_h
#ifndef galaxy_Bridge_Header_h
#define galaxy_Bridge_Header_h
#define galaxy_Bridge_Header_h
#import "YHSMSCodeInputView.h"
#import "YHSMSCodeView.h"
#endif
/* galaxy_Bridge_Header_h */
#endif
/* galaxy_Bridge_Header_h */
galaxy/galaxy/Modules/Mine(我的)/C/YHMyViewController.swift
View file @
520a6c39
...
@@ -19,6 +19,7 @@ struct PersonalModuleItem {
...
@@ -19,6 +19,7 @@ struct PersonalModuleItem {
}
}
class
YHMyViewController
:
YHBaseViewController
,
ConstraintRelatableTarget
{
class
YHMyViewController
:
YHBaseViewController
,
ConstraintRelatableTarget
{
lazy
var
tableView
:
UITableView
=
{
lazy
var
tableView
:
UITableView
=
{
let
tableView
=
UITableView
(
frame
:
CGRect
.
zero
,
style
:
.
plain
)
let
tableView
=
UITableView
(
frame
:
CGRect
.
zero
,
style
:
.
plain
)
tableView
.
backgroundColor
=
UIColor
.
red
tableView
.
backgroundColor
=
UIColor
.
red
...
@@ -29,6 +30,11 @@ class YHMyViewController: YHBaseViewController, ConstraintRelatableTarget {
...
@@ -29,6 +30,11 @@ class YHMyViewController: YHBaseViewController, ConstraintRelatableTarget {
return
tableView
return
tableView
}()
}()
lazy
var
smsInputView
:
YHSMSCodeInputView
=
{
let
codeView
=
YHSMSCodeInputView
(
frame
:
CGRectZero
)
return
codeView
}()
lazy
var
items
:
[
PersonalModuleItem
]
=
{
lazy
var
items
:
[
PersonalModuleItem
]
=
{
return
[
PersonalModuleItem
(
icon
:
""
,
title
:
"我的管家"
),
return
[
PersonalModuleItem
(
icon
:
""
,
title
:
"我的管家"
),
PersonalModuleItem
(
icon
:
""
,
title
:
"我的订单"
),
PersonalModuleItem
(
icon
:
""
,
title
:
"我的订单"
),
...
@@ -52,13 +58,21 @@ class YHMyViewController: YHBaseViewController, ConstraintRelatableTarget {
...
@@ -52,13 +58,21 @@ class YHMyViewController: YHBaseViewController, ConstraintRelatableTarget {
make
.
edges
.
equalTo
(
self
.
view
)
make
.
edges
.
equalTo
(
self
.
view
)
}
}
let
inputView
=
YHValidateCodeInputView
(
count
:
6
,
inputWith
:
40
,
inputHeight
:
60
,
gap
:
10
)
view
.
addSubview
(
self
.
smsInputView
)
view
.
addSubview
(
inputView
)
smsInputView
.
snp
.
makeConstraints
{
make
in
inputView
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalTo
(
self
.
view
)
.
offset
(
50
)
make
.
left
.
right
.
equalTo
(
self
.
view
)
make
.
right
.
equalTo
(
self
.
view
)
.
offset
(
-
50
)
make
.
top
.
equalTo
(
self
.
view
.
snp
.
top
)
.
offset
(
100
)
make
.
top
.
equalTo
(
self
.
view
.
snp
.
top
)
.
offset
(
100
)
make
.
height
.
equalTo
(
10
0
)
make
.
height
.
equalTo
(
6
0
)
}
}
// let inputView = YHValidateCodeInputView(count: 6, inputWith: 40, inputHeight: 60, gap: 10)
// view.addSubview(inputView)
// inputView.snp.makeConstraints { make in
// make.left.right.equalTo(self.view)
// make.top.equalTo(self.view.snp.top).offset(100)
// make.height.equalTo(100)
// }
}
}
}
}
...
...
galaxy/galaxy/Modules/Mine(我的)/V/验证码输入框/YHSMSCodeInputView.h
0 → 100755
View file @
520a6c39
//
// BsSMSCodeInputView.h
// ObjectiveCTools
//
// Created by aidong on 2020/10/13.
// Copyright © 2020 姬友大人. All rights reserved.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface
YHSMSCodeInputView
:
UIView
///验证码文字
@property
(
strong
,
nonatomic
)
NSString
*
codeText
;
///设置验证码位数 默认 4 位
@property
(
nonatomic
)
NSInteger
codeCount
;
///验证码数字之间的间距 默认 35
@property
(
nonatomic
)
CGFloat
codeSpace
;
@property
(
nonatomic
,
weak
)
id
myDelegate
;
@end
@protocol
BsSMSCodeInputViewDelegate
<
NSObject
>
@optional
-
(
void
)
textFieldFinisedInput
:
(
YHSMSCodeInputView
*
)
input
verifyCode
:
(
NSString
*
)
code
;
@end
NS_ASSUME_NONNULL_END
galaxy/galaxy/Modules/Mine(我的)/V/验证码输入框/YHSMSCodeInputView.m
0 → 100755
View file @
520a6c39
//
// BsSMSCodeInputView.m
// ObjectiveCTools
//
// Created by aidong on 2020/10/13.
// Copyright © 2020 姬友大人. All rights reserved.
//
#import "YHSMSCodeInputView.h"
#import "YHSMSCodeView.h"
@interface
YHSMSCodeInputView
()
<
UITextFieldDelegate
>
///输入框
@property
(
strong
,
nonatomic
)
UITextField
*
textField
;
///格子数组
@property
(
nonatomic
,
strong
)
NSMutableArray
<
YHSMSCodeView
*>
*
arrayTextFidld
;
///记录上一次的字符串
@property
(
strong
,
nonatomic
)
NSString
*
lastString
;
///放置小格子
@property
(
strong
,
nonatomic
)
UIView
*
contentView
;
@end
@implementation
YHSMSCodeInputView
-
(
instancetype
)
init
{
if
(
self
=
[
super
init
])
{
[
self
config
];
}
return
self
;
}
-
(
instancetype
)
initWithFrame
:
(
CGRect
)
frame
{
self
=
[
super
initWithFrame
:
frame
];
if
(
self
)
{
[
self
config
];
}
return
self
;
}
-
(
void
)
config
{
_codeCount
=
6
;
//在初始化函数里面, 如果重写了某个属性的setter方法, 那么使用 self.codeCount 会直接调用重写的 setter 方法, 会造成惊喜!
_codeSpace
=
10
;
//初始化数组
_arrayTextFidld
=
[
NSMutableArray
array
];
_lastString
=
@""
;
//输入框
_textField
=
[[
UITextField
alloc
]
init
];
_textField
.
keyboardType
=
UIKeyboardTypeNumberPad
;
_textField
.
textColor
=
UIColor
.
clearColor
;
_textField
.
tintColor
=
UIColor
.
clearColor
;
_textField
.
delegate
=
self
;
[
self
addSubview
:
_textField
];
[[
NSNotificationCenter
defaultCenter
]
addObserver
:
self
selector
:
@selector
(
textFieldDidChangeValue
:
)
name
:
UITextFieldTextDidChangeNotification
object
:
_textField
];
//放置View
_contentView
=
[[
UIView
alloc
]
init
];
_contentView
.
backgroundColor
=
UIColor
.
clearColor
;
_contentView
.
userInteractionEnabled
=
NO
;
[
self
addSubview
:
_contentView
];
}
-
(
void
)
layoutSubviews
{
[
super
layoutSubviews
];
[
self
updateSubViews
];
}
-
(
void
)
updateSubViews
{
self
.
textField
.
frame
=
self
.
bounds
;
self
.
contentView
.
frame
=
self
.
bounds
;
// self.contentView.backgroundColor = UIColor.purpleColor;
/*
方案1: 直接把原来的都删掉, 重新创建
for (BsSMSCodeView *v in [self.arrayTextFidld reverseObjectEnumerator]) {
[v removeFromSuperview];
[self.arrayTextFidld removeObject:v];
}
*/
//方案2:能用就用,少了再建
if
(
_arrayTextFidld
.
count
<
_codeCount
)
{
//已经存在的子控件比新来的数要小, 那么就创建
NSUInteger
c
=
_codeCount
-
_arrayTextFidld
.
count
;
for
(
NSInteger
i
=
0
;
i
<
c
;
i
++
)
{
YHSMSCodeView
*
v
=
[[
YHSMSCodeView
alloc
]
init
];
[
_arrayTextFidld
addObject
:
v
];
}
}
else
if
(
_arrayTextFidld
.
count
==
_codeCount
)
{
//个数相等
return
;
//如果return,那么就是什么都不做, 如果不return, 那么后续可以更新颜色之类, 或者在转屏的时候重新布局
}
else
if
(
_arrayTextFidld
.
count
>
_codeCount
)
{
//个数有多余, 那么不用创建新的, 为了尽可能释放内存, 把不用的移除掉,
NSUInteger
c
=
_arrayTextFidld
.
count
-
_codeCount
;
for
(
NSInteger
i
=
0
;
i
<
c
;
i
++
)
{
[
_arrayTextFidld
.
lastObject
removeFromSuperview
];
[
_arrayTextFidld
removeLastObject
];
}
}
//可用宽度 / 格子总数
CGFloat
w
=
(
self
.
bounds
.
size
.
width
-
_codeSpace
*
(
_codeCount
-
1
))
/
_codeCount
;
//重新布局小格子
for
(
NSInteger
i
=
0
;
i
<
_arrayTextFidld
.
count
;
i
++
)
{
YHSMSCodeView
*
t
=
_arrayTextFidld
[
i
];
[
self
.
contentView
addSubview
:
t
];
t
.
frame
=
CGRectMake
(
i
*
(
w
+
_codeSpace
),
0
,
w
,
self
.
bounds
.
size
.
height
);
}
}
//已经编辑
-
(
void
)
textFieldDidChangeValue
:
(
NSNotification
*
)
notification
{
UITextField
*
sender
=
(
UITextField
*
)[
notification
object
];
/*
bug: NSUInteger.
sender.text.length 返回值是 NSUInteger,无符号整型, 当两个无符号整型做减法, 如果 6 - 9, 那么不会得到 -3, 而是一串很长的整型数, 也就是计算失误
*/
BOOL
a
=
sender
.
text
.
length
>=
self
.
lastString
.
length
;
BOOL
b
=
sender
.
text
.
length
-
self
.
lastString
.
length
>=
_codeCount
;
if
(
a
&&
b
)
{
//判断为一连串验证码输入, 那么,最后N个,就是来自键盘上的短信验证码,取最后N个
NSLog
(
@"一连串的输入"
);
sender
.
text
=
[
sender
.
text
substringFromIndex
:
sender
.
text
.
length
-
_codeCount
];
}
if
(
sender
.
text
.
length
>=
_codeCount
+
1
)
{
//对于持续输入,只要前面N个就行
NSLog
(
@"持续输入"
);
sender
.
text
=
[
sender
.
text
substringToIndex
:
_codeCount
-
1
];
}
//字符串转数组
NSMutableArray
<
NSString
*>
*
stringArray
=
[
NSMutableArray
array
];
NSString
*
temp
=
nil
;
for
(
int
i
=
0
;
i
<
[
sender
.
text
length
];
i
++
)
{
temp
=
[
sender
.
text
substringWithRange
:
NSMakeRange
(
i
,
1
)];
[
stringArray
addObject
:
temp
];
}
//设置文字
for
(
int
i
=
0
;
i
<
self
.
arrayTextFidld
.
count
;
i
++
)
{
YHSMSCodeView
*
BsSMSCodeView
=
self
.
arrayTextFidld
[
i
];
if
(
i
<
stringArray
.
count
)
{
BsSMSCodeView
.
text
=
stringArray
[
i
];
}
else
{
BsSMSCodeView
.
text
=
@""
;
}
}
//设置光标
if
(
stringArray
.
count
==
0
)
{
for
(
int
i
=
0
;
i
<
self
.
arrayTextFidld
.
count
;
i
++
)
{
BOOL
show
=
(
i
==
0
?
YES
:
NO
);
YHSMSCodeView
*
BsSMSCodeView
=
self
.
arrayTextFidld
[
i
];
BsSMSCodeView
.
showCursor
=
show
;
}
}
else
if
(
stringArray
.
count
==
self
.
arrayTextFidld
.
count
)
{
for
(
int
i
=
0
;
i
<
self
.
arrayTextFidld
.
count
;
i
++
)
{
YHSMSCodeView
*
BsSMSCodeView
=
self
.
arrayTextFidld
[
i
];
BsSMSCodeView
.
showCursor
=
NO
;
}
}
else
{
for
(
int
i
=
0
;
i
<
self
.
arrayTextFidld
.
count
;
i
++
)
{
YHSMSCodeView
*
BsSMSCodeView
=
self
.
arrayTextFidld
[
i
];
if
(
i
==
stringArray
.
count
)
{
BsSMSCodeView
.
showCursor
=
YES
;
}
else
{
BsSMSCodeView
.
showCursor
=
NO
;
}
}
}
if
(
stringArray
.
count
==
self
.
arrayTextFidld
.
count
)
{
[
self
.
textField
resignFirstResponder
];
//输入完毕 回调出去
if
(
self
.
myDelegate
&&
[
self
.
myDelegate
respondsToSelector
:
@selector
(
textFieldFinisedInput
:
verifyCode
:
)])
{
[
self
.
myDelegate
textFieldFinisedInput
:
self
verifyCode
:
self
.
codeText
];
}
}
self
.
lastString
=
sender
.
text
;
}
-
(
void
)
textFieldDidBeginEditing
:
(
UITextField
*
)
textField
{
//检查上一次的字符串
if
(
self
.
lastString
.
length
==
0
||
self
.
lastString
.
length
==
1
)
{
self
.
arrayTextFidld
.
firstObject
.
showCursor
=
YES
;
}
else
if
(
self
.
lastString
.
length
==
self
.
arrayTextFidld
.
count
)
{
self
.
arrayTextFidld
.
lastObject
.
showCursor
=
YES
;
}
else
{
self
.
arrayTextFidld
[
self
.
lastString
.
length
-
1
].
showCursor
=
YES
;
}
}
-
(
NSString
*
)
codeText
{
return
self
.
textField
.
text
;
}
-
(
BOOL
)
resignFirstResponder
{
for
(
int
i
=
0
;
i
<
self
.
arrayTextFidld
.
count
;
i
++
)
{
YHSMSCodeView
*
BsSMSCodeView
=
self
.
arrayTextFidld
[
i
];
BsSMSCodeView
.
showCursor
=
NO
;
}
[
self
.
textField
resignFirstResponder
];
return
YES
;
}
-
(
BOOL
)
becomeFirstResponder
{
[
self
.
textField
becomeFirstResponder
];
return
YES
;
}
///如果要求可以随时更改输入位数, 那么,
-
(
void
)
setCodeCount
:
(
NSInteger
)
codeCount
{
_codeCount
=
codeCount
;
//因为个数改变,清空之前输入的内容
self
.
lastString
=
@""
;
self
.
textField
.
text
=
@""
;
for
(
NSInteger
i
=
0
;
i
<
_arrayTextFidld
.
count
;
i
++
)
{
YHSMSCodeView
*
t
=
_arrayTextFidld
[
i
];
t
.
text
=
@""
;
if
(
i
==
0
)
{
t
.
showCursor
=
YES
;
}
else
{
t
.
showCursor
=
NO
;
}
}
[
self
setNeedsLayout
];
[
self
layoutIfNeeded
];
}
//
-
(
BOOL
)
textField
:
(
UITextField
*
)
textField
shouldChangeCharactersInRange
:
(
NSRange
)
range
replacementString
:
(
NSString
*
)
string
{
if
([
string
isEqual
:
@""
])
{
return
true
;
}
if
(
textField
.
text
.
length
>=
_codeCount
)
{
return
false
;
}
return
true
;
}
@end
galaxy/galaxy/Modules/Mine(我的)/V/验证码输入框/YHSMSCodeView.h
0 → 100755
View file @
520a6c39
//
// BsSMSCodeView.h
// ObjectiveCTools
//
// Created by aidong on 2020/10/13.
// Copyright © 2020 姬友大人. All rights reserved.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface
YHSMSCodeView
:
UIView
///文字
@property
(
nonatomic
,
strong
)
NSString
*
text
;
///显示光标 默认关闭
@property
(
nonatomic
)
BOOL
showCursor
;
@end
NS_ASSUME_NONNULL_END
galaxy/galaxy/Modules/Mine(我的)/V/验证码输入框/YHSMSCodeView.m
0 → 100755
View file @
520a6c39
//
// BsSMSCodeView.m
// ObjectiveCTools
//
// Created by aidong on 2020/10/13.
// Copyright © 2020 姬友大人. All rights reserved.
//
#import "YHSMSCodeView.h"
@interface
YHSMSCodeView
()
@property
(
nonatomic
,
strong
)
UILabel
*
label
;
@property
(
nonatomic
,
strong
)
UIView
*
line
;
@property
(
nonatomic
,
strong
)
UIView
*
cursor
;
@property
(
nonatomic
,
strong
)
UIColor
*
mainColor
;
@end
@implementation
YHSMSCodeView
-
(
instancetype
)
init
{
self
=
[
super
init
];
if
(
self
)
{
[
self
config
];
}
return
self
;
}
-
(
instancetype
)
initWithFrame
:
(
CGRect
)
frame
{
self
=
[
super
initWithFrame
:
frame
];
if
(
self
)
{
[
self
config
];
}
return
self
;
}
-
(
void
)
config
{
self
.
userInteractionEnabled
=
NO
;
_line
=
[[
UIView
alloc
]
init
];
_line
.
userInteractionEnabled
=
NO
;
_line
.
backgroundColor
=
UIColor
.
blackColor
;
_line
.
hidden
=
YES
;
[
self
addSubview
:
_line
];
_label
=
[[
UILabel
alloc
]
init
];
_label
.
textColor
=
UIColor
.
whiteColor
;
_label
.
font
=
[
UIFont
boldSystemFontOfSize
:
20
];
[
self
addSubview
:
_label
];
//默认关闭
_showCursor
=
NO
;
self
.
layer
.
cornerRadius
=
6
;
self
.
clipsToBounds
=
YES
;
self
.
backgroundColor
=
[
UIColor
colorWithWhite
:
1
alpha
:
0
.
3
];
}
-
(
void
)
layoutSubviews
{
[
super
layoutSubviews
];
self
.
line
.
frame
=
CGRectMake
(
0
,
self
.
frame
.
size
.
height
-
1
,
self
.
frame
.
size
.
width
,
1
);
CGFloat
x
=
(
self
.
frame
.
size
.
width
-
self
.
label
.
frame
.
size
.
width
)
/
2
.
0
;
CGFloat
y
=
(
self
.
frame
.
size
.
height
-
self
.
label
.
frame
.
size
.
height
)
/
2
.
0
;
self
.
label
.
frame
=
CGRectMake
(
x
,
y
,
self
.
label
.
frame
.
size
.
width
,
self
.
label
.
frame
.
size
.
height
);
[
self
updateCursorFrame
];
}
-
(
void
)
setText
:
(
NSString
*
)
text
{
_text
=
text
;
if
(
_text
.
length
>
0
)
{
_line
.
backgroundColor
=
UIColor
.
redColor
;
}
else
{
_line
.
backgroundColor
=
UIColor
.
grayColor
;
}
_label
.
text
=
text
;
[
self
.
label
sizeToFit
];
[
self
setNeedsLayout
];
[
self
layoutIfNeeded
];
}
-
(
void
)
updateCursorFrame
{
CGFloat
x
=
0
;
if
(
self
.
label
.
frame
.
size
.
width
<=
0
)
{
x
=
(
self
.
frame
.
size
.
width
-
1
.
6
)
/
2
.
0
;
}
else
{
x
=
CGRectGetMaxX
(
self
.
label
.
frame
);
}
_cursor
.
frame
=
CGRectMake
(
x
,
10
,
1
.
6
,
self
.
frame
.
size
.
height
-
20
);
}
-
(
void
)
setShowCursor
:
(
BOOL
)
showCursor
{
if
(
_showCursor
==
YES
&&
showCursor
==
YES
)
{
//重复开始, 那么,什么也不做
}
else
if
(
_showCursor
==
YES
&&
showCursor
==
NO
)
{
//原来是开始的, 现在要求关闭, 那么,就关闭
[
_cursor
removeFromSuperview
];
}
else
if
(
_showCursor
==
NO
&&
showCursor
==
YES
)
{
//原来是关闭, 现在要求开始, 那么, 开始
_cursor
=
[[
UIView
alloc
]
init
];
_cursor
.
userInteractionEnabled
=
NO
;
_cursor
.
backgroundColor
=
UIColor
.
blackColor
;
[
self
addSubview
:
_cursor
];
[
self
updateCursorFrame
];
_cursor
.
alpha
=
0
;
[
self
animationOne
:
_cursor
];
}
else
if
(
_showCursor
==
NO
&&
showCursor
==
NO
)
{
//重复关闭
[
_cursor
removeFromSuperview
];
}
_showCursor
=
showCursor
;
}
// 光标效果
-
(
void
)
animationOne
:
(
UIView
*
)
aView
{
[
UIView
animateWithDuration
:
0
.
1
delay
:
0
options
:
UIViewAnimationOptionCurveEaseIn
animations
:^
{
aView
.
alpha
=
1
;
}
completion
:^
(
BOOL
finished
)
{
if
(
self
.
showCursor
)
{
[
self
performSelector
:
@selector
(
animationTwo
:)
withObject
:
aView
afterDelay
:
0
.
5
];
}
}];
}
-
(
void
)
animationTwo
:
(
UIView
*
)
aView
{
[
UIView
animateWithDuration
:
0
.
3
delay
:
0
options
:
UIViewAnimationOptionCurveEaseOut
animations
:^
{
aView
.
alpha
=
0
;
}
completion
:^
(
BOOL
finished
)
{
if
(
self
.
showCursor
)
{
[
self
performSelector
:
@selector
(
animationOne
:)
withObject
:
aView
afterDelay
:
0
.
1
];
}
}];
}
#pragma mark - lazy
-
(
UIColor
*
)
mainColor
{
if
(
!
_mainColor
)
{
_mainColor
=
[
UIColor
colorWithRed
:
70
/
255
green
:
224
/
255
.
0
blue
:
187
/
255
.
0
alpha
:
1
.
0
];
}
return
_mainColor
;
}
@end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment