UITextField仅适用于某些范围

时间:2014-08-12 06:06:46

标签: ios uitextfield

在我的应用程序中,我需要在UITextField中添加一些文本(比如ABC) 这是不可编辑的。在此文本字段中输入的任何字符后面都应该是可编辑的文本。(如果我输入123则文本应该是ABC123,123部分是可编辑的。)如何做到这一点

4 个答案:

答案 0 :(得分:1)

您需要与UITextField代表

一起玩

示例代码

每次为UITextFiled设置前缀,如果为空

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
     if ([self.txtPhoneNo.text isEqualToString: @""]) {
                self.txtPhoneNo.text = @"ABC";
            }
    }

仅在特定前缀范围之后可编辑

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];

 NSString *prefixString = @"ABC";
        NSRange prefixStringRange = [searchStr rangeOfString:prefixString];
        if (prefixStringRange.location == 0) {
            // prefix found at the beginning of result string

            NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];
            NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
            return ([string isEqualToString:filtered]);
        }
        return NO;

}

如果没有文本,则重置TextField,前缀

除外
  -(void)textFieldDidEndEditing:(UITextField *)textField{
     if ([self.txtPhoneNo.text isEqualToString:@"ABC"]) {
                self.txtPhoneNo.text =@"";
            } 
     }

答案 1 :(得分:0)

最初将ABC放入viewDidLoad或xib中的UITextField或您想要的位置。

yourTextField.text=@"ABC";  

然后你可以使用它。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([textField.text isEqualToString:@"ABC"] && [string isEqualToString:@""]) {
        return NO;
    }
    return YES;
}

答案 2 :(得分:0)

非常简单

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

    if (range.location <= [@"ABC" length]) {
        return NO;
    }

    return YES;
}

如何运作:

USER EDITS TEXTFIELD (either paste/replace or direct editing)
|
|
V
SYSTEM WILL CALL shouldChangeCharacterInRange
                 |
                 |
                 V
                 if you return true from this, then editing takes place
                 else, changes will be discarded

范围对象包含location(文本中的更改开始)和length(来自location,将更改多少个字符)。

所以,

  • 如果location <= 3,即用户正在编辑@“ABC”,我们应该阻止,请返回NO
  • 对于所有其他情况,用户正在编辑文本字段中的其他位置,返回YES

如果您想进一步优化,可以用预先计算的长度值替换[@"ABC" length]

答案 3 :(得分:0)

最初将ABC放在viewDidLoad或xib中的UITextField中,或者你想要的地方。

[[NSNotificationCenter defaultCenter] addObserver:(id)self selector:@selector(textFieldChangeCharacters:) name:UITextFieldTextDidChangeNotification object:nil];


-(void)textFieldChangeCharacters:(id)sender{

     UITextField *textField = [(NSNotification *)sender object];
     NSLog(@"Textfield Text = %@",textField.text);
     if (textField.text.length < @"ABC".length) {
        textField.text = @"ABC";
     }


}