如何限制 iOS 中的前缀文本字段字符串?
How Can I restrict the prefix textfield string in iOS?
如何限制 textField
字符串的前缀。
我想要文本框有默认前缀字符串(AAAA-)的效果。
(AAAA- 用户添加字符串后)
并且用户无法删除这些字符串,用户可以将字符串添加到 textField
。
如何使用下面的委托方法实现效果?
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
}
我不想自定义模态视图来实现这些效果。
有没有一些textfield的方法可以实现?
谢谢
---详细解释问题---
我使用 UIAlertAction 在 AlertAction 中添加文本字段,如下所示:
在我声明的接口处
NSString *_prefixString;
在 viewdidload 中设置初始值
_prefixString = @"AAAA-";
并且我在头文件中设置了 UITextFieldDelegate。
然后下面设置alertviewcontroller:
UIAlertController *changeDeviceNameDialog =[UIAlertController
alertControllerWithTitle:NSLocalizedString(@"change_device_name",nil) message:nil preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelChangeDevNameAc = [UIAlertAction actionWithTitle:NSLocalizedString(@"cancel",nil) style:UIAlertActionStyleDefault handler:nil];
UIAlertAction *enterChangeDevNameAc = [UIAlertAction actionWithTitle:NSLocalizedString(@"enter",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
UITextField *newDeviceNameTF = changeDeviceNameDialog.textFields[0];
}];
[changeDeviceNameDialog addAction:cancelChangeDevNameAc];
[changeDeviceNameDialog addAction:enterChangeDevNameAc];
[changeDeviceNameDialog addTextFieldWithConfigurationHandler:^(UITextField *textField){
textField.delegate = self;
textField.placeholder = NSLocalizedString(@"new_device_name", nil);
textField.text = _prefixString;
}];
[self presentViewController:changeDeviceNameDialog animated:YES completion:nil];
// below refer the replay
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([textField.text isEqualToString:_prefixString] && range.location == _prefixString.length - 1 && range.length == 1) {
return NO;
}
return YES;
}
我想要的效果是弹出alert的时候,textfield有默认文本AAAA-,用户不能清除AAAA-文本。
用户可以输入附加 AAAA- 的其他文本。
但是像upper一样的delegate,我还是可以去掉前缀文字的。
如果replacementString的长度是-1,并且是你要防止被删除的字符串的范围,那么return FALSE。
试试这个,
设置你的prefixString
,
self.prefixString = @"PREFIX";
然后在delegate
方法中,
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([textField.text isEqualToString:_prefixString] && range.location == _prefixString.length - 1 && range.length == 1) {
return NO;
}
return YES;
}
您可以根据下面的代码设置 textField
和 setLeftViewMode
来实现您想要的效果。
UILabel *lblPrifix = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
lblPrifix.text = @"AAAA-";
[_textField setLeftView:poundLabel];
[_ textField setLeftViewMode:UITextFieldViewModeAlways];
希望对您有所帮助。
如何限制 textField
字符串的前缀。
我想要文本框有默认前缀字符串(AAAA-)的效果。
(AAAA- 用户添加字符串后)
并且用户无法删除这些字符串,用户可以将字符串添加到 textField
。
如何使用下面的委托方法实现效果?
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
}
我不想自定义模态视图来实现这些效果。
有没有一些textfield的方法可以实现?
谢谢
---详细解释问题---
我使用 UIAlertAction 在 AlertAction 中添加文本字段,如下所示:
在我声明的接口处
NSString *_prefixString;
在 viewdidload 中设置初始值
_prefixString = @"AAAA-";
并且我在头文件中设置了 UITextFieldDelegate。
然后下面设置alertviewcontroller:
UIAlertController *changeDeviceNameDialog =[UIAlertController
alertControllerWithTitle:NSLocalizedString(@"change_device_name",nil) message:nil preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelChangeDevNameAc = [UIAlertAction actionWithTitle:NSLocalizedString(@"cancel",nil) style:UIAlertActionStyleDefault handler:nil];
UIAlertAction *enterChangeDevNameAc = [UIAlertAction actionWithTitle:NSLocalizedString(@"enter",nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
UITextField *newDeviceNameTF = changeDeviceNameDialog.textFields[0];
}];
[changeDeviceNameDialog addAction:cancelChangeDevNameAc];
[changeDeviceNameDialog addAction:enterChangeDevNameAc];
[changeDeviceNameDialog addTextFieldWithConfigurationHandler:^(UITextField *textField){
textField.delegate = self;
textField.placeholder = NSLocalizedString(@"new_device_name", nil);
textField.text = _prefixString;
}];
[self presentViewController:changeDeviceNameDialog animated:YES completion:nil];
// below refer the replay
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([textField.text isEqualToString:_prefixString] && range.location == _prefixString.length - 1 && range.length == 1) {
return NO;
}
return YES;
}
我想要的效果是弹出alert的时候,textfield有默认文本AAAA-,用户不能清除AAAA-文本。
用户可以输入附加 AAAA- 的其他文本。
但是像upper一样的delegate,我还是可以去掉前缀文字的。
如果replacementString的长度是-1,并且是你要防止被删除的字符串的范围,那么return FALSE。
试试这个,
设置你的prefixString
,
self.prefixString = @"PREFIX";
然后在delegate
方法中,
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([textField.text isEqualToString:_prefixString] && range.location == _prefixString.length - 1 && range.length == 1) {
return NO;
}
return YES;
}
您可以根据下面的代码设置 textField
和 setLeftViewMode
来实现您想要的效果。
UILabel *lblPrifix = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
lblPrifix.text = @"AAAA-";
[_textField setLeftView:poundLabel];
[_ textField setLeftViewMode:UITextFieldViewModeAlways];
希望对您有所帮助。