Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITextField自动删除_Ios_Objective C_Uitextfield - Fatal编程技术网

Ios UITextField自动删除

Ios UITextField自动删除,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,当用户按住delete键一段时间后,UITextField开始一次删除多个字符。我正在尝试创建一个UITextField,它的第一个字符是#。这一点永远不应该被删除。下面的代码用于防止用户在键入多个字符时删除#accept,然后继续按住delete键,直到UITextField一次删除多个字符。然后,用户可以删除UITextField中的所有字符,尽管逻辑如下。这怎么可能 - (BOOL)textField:(UITextField *)textField shouldChangeCharact

当用户按住delete键一段时间后,
UITextField
开始一次删除多个字符。我正在尝试创建一个
UITextField
,它的第一个字符是#。这一点永远不应该被删除。下面的代码用于防止用户在键入多个字符时删除#accept,然后继续按住delete键,直到
UITextField
一次删除多个字符。然后,用户可以删除
UITextField
中的所有字符,尽管逻辑如下。这怎么可能

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

    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if (newLength < 1)
        return NO;
    else if (newString.length == 0)
        return NO;

    return (newLength > 30) ? NO : YES;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串{
NSUInteger newLength=[textField.text length]+[string length]-range.length;
NSString*newString=[textField.text stringByReplacingCharactersInRange:range with string:string];
如果(新长度<1)
返回否;
else if(newString.length==0)
返回否;
返回(新长度>30)?否:是;
}

也许这样更好:

- (void) textViewDidChange:(UITextView *)textView {
    if (![textView.text hasPrefix:@"#"]) {
        textView.text = [NSString stringWithFormat:@"#%@", textView.text];
    }
}

这样,在任何时候,如果您的文本视图没有前缀“#”,则会将其放入。否则,如果用户键入10个字符,然后返回并删除“#”,系统将无法识别它,或者如果用户高亮显示所有文本并删除它。如果以后的代码依赖于“#”字符,我认为这可能更可靠。

我不确定
shouldChangeCharactersInRange
方法在技术上是否允许直接修改文本字段,但请尝试一下,让我知道它是如何运行的

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

    if ( newString.length > 30 )
        return( NO );

    if ( newString.length < 1 )
        newString = @"#";

    textField.text = newString;  // I'll change the string myself thanks
    return( NO );                // string's already changed, don't change it again
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
NSString*newString=[textField.text stringByReplacingCharactersInRange:range with string:string];
如果(新闻字符串长度>30)
返回(否);
if(newString.length<1)
新闻字符串=@“#”;
textField.text=newString;//我将自己更改字符串,谢谢
return(NO);//字符串已更改,不要再更改
}

您是否验证了当用户按下delete键时调用此方法?顺便问一下,
新闻字符串的意义是什么?您的
newLength
将始终等于
newString.length
,因此只需使用
newLength