Jos*_*ane 9 cocoa-touch objective-c uitextview ios
我有一个UITextView,需要使特定部分不可删除.它是视图文本的前10个字符.
希望你能提供帮助,我只是想要它,这样如果用户点击键盘上的删除键,它就会在它到达时说停止说第10个字符.
希望你能帮忙,谢谢.
编辑:
Progress1感谢您到目前为止的答案,让我进一步了解一下细节.
让我们说前缀是'123456789:'.我希望能够在这个前缀之后的任何地方输入,但它根本不可编辑,因此'123456789:'不应该被改变.Fichek的答案完美地做到了这一点,但是前缀并不总是存在,所以如何检测它何时不在textview中?我认为if语句做了这个,但似乎没有.
sch*_*sch 14
您可以使用委托方法textView:shouldChangeTextInRange:replacementText:告诉文本视图是否接受删除.
正如文件所说:
range:当前选择范围.如果范围的长度为0,则范围反映当前插入点.如果用户按下Delete键,则范围的长度为1,空字符串对象将替换该单个字符.
编辑
这是一种用户无法删除前十个字符的实现.但他可以在那里插入角色.
- (BOOL)textView:(UITextView *)textView shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (range.length==1 && string.length == 0) {
// Deleting text
if (range.location <= 9) {
return NO;
}
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这是一个他无法修改前十个字符的实现.
- (BOOL)textView:(UITextView *)textView shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (range.location <= 9) {
return NO;
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
sch的最后编辑提供了一个不错的答案,但我想提供一种稍微灵活的方法.
您必须记住复制/粘贴系统.用户可以选择文本字段中的所有文本,并尝试粘贴可能完全可以接受的整个值,但if (range.location <= 9) { return NO; }会拒绝它.我这样做的方法是将一个字符串放在一起,这个字符串是成功编辑的结果,然后检查该字符串是否以您想要的前缀开头.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *resultString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"resulting string would be: %@", resultString);
NSString *prefixString = @"blabla";
NSRange prefixStringRange = [resultString rangeOfString:prefixString];
if (prefixStringRange.location == 0) {
// prefix found at the beginning of result string
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果要检查文本字段中的当前字符串是否以前缀开头,则可以使用rangeOfString:相同的方式:
NSRange prefixRange = [textField.text rangeOfString:prefixString];
if (prefixRange.location == 0) {
// prefix found at the beginning of text field
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3539 次 |
| 最近记录: |