您的位置:首页 > 其它

实现几个连续输入的textfield

2015-08-19 14:34 288 查看
如图所示,需要实现连续输入和删除的textfield
代码如下:
首先定义一个宏来实现过滤非法字符串,让输入的字符都是我定义的里面的字符。

#define kInputNumbers @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\n"

下面是定义的4个textfield
@property
(retain,
nonatomic)
IBOutlet
JDTextField
*textField1;

@property
(retain,
nonatomic)
IBOutlet
JDTextField
*textField2;

@property
(retain,
nonatomic)
IBOutlet
JDTextField
*textField3;
@property
(retain,
nonatomic)
IBOutlet
JDTextField
*textField4;
因为并没有直接可以调用的方法,所以要自己加上观察
[[NSNotificationCenter
defaultCenter]
addObserver:self
selector:@selector(textFieldTextDidChange:)
name:UITextFieldTextDidChangeNotification
object:nil];
/**

*
为了统一界面,在第一个field之前加上@“


*

* @param
textField

*/

- (void) textFieldDidBeginEditing:(UITextField
*)textField{

if (textField ==
_textField1 && !_isDelete) {

textField.text
=
@" ";

}

}

/**

*
对应的field改变之前调用这个方法,在这里面来控制从前面格子往后跳转

*

* @param
textField textField

* @param
range
传入的是改变之前光标所在的位置和长度,如果是删除的话是改变后光标的位置,长度为-1

* @param
string
改变的字符

*

* @return
YES的时候确认改变,NO的时候抛弃改变(可以用来过滤字符)

*/

- (BOOL)textField:(UITextField
*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString
*)string{

//过滤非法字符

NSCharacterSet *cs = [[NSCharacterSet
characterSetWithCharactersInString:kInputNumbers]
invertedSet];

NSString *filtered = [[string
componentsSeparatedByCharactersInSet:cs]
componentsJoinedByString:@""];

BOOL basicTest = [string
isEqualToString:filtered];

if (!basicTest) {

return
NO;

}

//确定是否是删除键

_isDelete = string.length
<=
0 ?
YES :
NO;

if (textField ==
_textField1) {

//这个方法确保手动点击某个textfield时可以实现跳到下一个

if (range.location
==
5) {

[textField
resignFirstResponder];

_textField2.enabled
=
YES;

[_textField2
becomeFirstResponder];

textField.enabled
=
NO;

return
YES;

}

if (range.location
==
0 &&
_isDelete)

{

return
NO;

}

}

else
if (textField ==
_textField2) {

if (range.location
==
5) {

[textField
resignFirstResponder];

_textField3.enabled
=
YES;

[_textField3
becomeFirstResponder];

textField.enabled
=
NO;

return
YES;

}

if (range.location
==
0 &&
_isDelete){

[textField
resignFirstResponder];

_textField1.enabled
=
YES;

[_textField1
becomeFirstResponder];

textField.enabled
=
NO;

return
YES;

}

}

else
if (textField ==
_textField3) {

if (range.location
==
5) {

[textField
resignFirstResponder];

_textField4.enabled
=
YES;

[_textField4
becomeFirstResponder];

textField.enabled
=
NO;

return
YES;

}

if (range.location
==
0 &&
_isDelete){

[textField
resignFirstResponder];

_textField2.enabled
=
YES;

[_textField2
becomeFirstResponder];

textField.enabled
=
NO;

return
YES;

}

}

else{

if (range.location
==
0 &&
_isDelete){

[textField
resignFirstResponder];

_textField3.enabled
=
YES;

[_textField3
becomeFirstResponder];

textField.enabled
=
NO;

return
YES;

}

return range.location
<=
4 ;

}

return
YES;

}

/**

*
观察textfield改变之后的属性时调用这个方法,在这个方法里面控制往前面的格子里跳转(因为光标在第一个的时候没有回调方法,所以要在每个之前加上@“
”)

*

* @param
notification
传入观察的对象

*/

- (void)textFieldTextDidChange:(NSNotification
*)notification

{

self.moneyLabel.hidden
=
YES;

self.checkLeftBtn.enabled
=
NO;

self.saveAndUseBtn.enabled
=
NO;

UITextField *textField = (UITextField
*)[notification
object];

if (!_isDelete) {

if (textField ==
_textField1 ) {

if (textField.text.length
>=
5) {

_textField2.enabled
=
YES;

[textField
resignFirstResponder];

[_textField2
becomeFirstResponder];

_textField2.text
=
@" ";

textField.enabled
=
NO;

}

}else
if(textField ==
_textField2
){

if (textField.text.length
>=
5) {

_textField3.enabled
=
YES;

[textField
resignFirstResponder];

[_textField3
becomeFirstResponder];

_textField3.text
=
@" ";

textField.enabled
=
NO;

}

}else
if
(textField ==
_textField3 ){

if (textField.text.length
>=
5) {

_textField4.enabled
=
YES;

[textField
resignFirstResponder];

[_textField4
becomeFirstResponder];

_textField4.text
=
@" ";

textField.enabled
=
NO;

}

}

}

if (_textField1.text.length
+
_textField2.text.length
+
_textField3.text.length
+
_textField4.text.length>=
20) {

self.checkLeftBtn.enabled
=
YES;

self.saveAndUseBtn.enabled
=
YES;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: