5

有没有办法将字母永久添加到用户无法删除的 UITextField 中?我想添加一个字符,用户无法删除它,但他们仍然可以在之后添加字母。

干杯,

ps 这是iOS

4

3 回答 3

5

AUITextField有一个委托方法,称为应该更改范围内的字符,这个方法基本上是问,我应该添加还是删除下一个字符?从中你可以决定你想要什么。这是一些示例代码。

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

    BOOL shouldChangeCharacters = ( (textField.text.length + string.length) > 1 ); 
    return shouldChangeCharacters;

}

此代码表示如果添加的新字符加上当前文本大于 1,则可以进行更改,如果文本不大于 1,则我们不会进行更改...

现在,假设有人可能试图粘贴你的角色,这个委托方法仍然被调用,但你必须做一些事情。

if (range.location == 0) {
    NSString* firstCharacter = [string substringToIndex:1];
    BOOL firstCharacterIsDesiredCharacter = [firstCharacter isEqualToString:@"#"];
    if ( !firstCharacterIsDesiredCharacter ) {
        NSString* symbolWithText = [NSString stringWithFormat:@"#%@",text];

        //  ******************** \\

        [textView setText:symbolWithText];
        return NO;

        // or we could do this

        string = symbolWithText;

        //  ******************** \\

    }

}

这两种情况都在修改参数的值……有些人不喜欢这样做。这可能是一种不好的编程习惯。或者如果你要修改它们,你应该先做一些过程。

这样,如果他们试图替换第一个字符,我们只需要运行此代码,我替换了哈希标记符号,第一个字符来自位置 0 和长度 1 的范围。所以如果范围等于 0 ,然后我们运行我们的代码来修复它。此代码还考虑到他们可能会粘贴特殊符号。因此,如果UITextField读取#work,并且他们试图复制“work”或“#work”,它会考虑这两种情况,如果哈希标记是第一个字符,则完全跳过代码。

UITextField 参考

于 2013-10-17T02:06:24.420 回答
1

尝试这个

   UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
   label.text = @"left";
   label.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0];
   textField.leftViewMode = UITextFieldViewModeAlways;
   textField.leftView = label;
于 2013-10-17T01:52:41.487 回答
0

尝试使用这个:

在你的 .h 中:

IBOutlet UITextFeild *textFeild;

在你的 .m 中:

- (BOOL)textFieldShouldReturn:(UITextField *)textFeild {

NSString *textFeildText = textFeild.text;
textFeild.text = [NSString stringWithFormat:@"string you want to always add %@",textFeildText];

return NO;

}

当用户编辑文本框时,这不会总是显示,但是一旦他们点击返回,它就会自动添加到文本框中。如果您使用此代码,我建议您在默认情况下在文本字段中没有所需的字符串,否则您最终可能会得到如下内容:

String you want to add String you want to add Hello World!

如果您只使用我给您的代码,并且默认情况下不要将您希望始终在该字段中的字符串放在该字段中,那么您很高兴!如果您想让键盘在点击返回后自动消失,只需在“return NO”语句上方的 textFeildShouldReturn 方法中添加:

[textFeild resignFirstResponder];
于 2013-10-17T03:07:04.140 回答