我希望文本字段中的常量文字不可编辑,如:
ENTER YOUR NAME:
点击文本字段会在:
用户不应该删除或编辑“输入您的姓名:”。
有任何想法如何实现这个?
答案 0 :(得分:2)
将文本字段的委托设置为UITextFieldDelegate
实现的实例,并使用textField:shouldChangeCharactersInRange:replacementString:
方法查看用户是否正在尝试更改ENTER YOUR NAME:
字符串:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// "ENTER YOUR NAME:" occupies the first 16 characters; if the user us trying
// to change something that is within that 16-character range, say "NO"
if (range.location < 16) return NO;
... check additional conditions here
return YES;
}
我认为没有办法直接放置光标,但您可以在this answer中所述的初始文本的尾部冒号之后进行空选择。
答案 1 :(得分:0)
我没有足够的声誉,或者我只是发表评论,但奥马尔的建议是使用UILabel,在你的情况下会说“输入你的名字:”,然后将你的UITextField放在远离那个标签,你想控制光标的位置。
为了让它看起来不错,您可以放置某种背景文本字段样式的图像(这就是我所做的),或者将UILabel的默认背景拉伸到所需的长度,然后确保UITextField的子视图位于标签的上方。
布兰登
答案 2 :(得分:0)
我会接受大多数upvote的答案
然而,我已经设法以一种棘手而简单的方式完成它。
UIButton *rem = [UIButton buttonWithType:UIButtonTypeCustom];
rem.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
rem.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
rem.frame = CGRectMake(0.0f, 210.0f, 300.0f, 40.0f);
[rem setTitle:@"*X1*" forState:UIControlStateNormal];
CALayer * layer1 = [rem layer];
[layer1 setMasksToBounds:YES];
[layer1 setCornerRadius:8.0];
[layer1 setBorderWidth:0.0];
[layer1 setBorderColor:[[UIColor grayColor] CGColor]];
rem.backgroundColor = [UIColor colorWithPatternImage:image];
rem.titleLabel.font = [UIFont systemFontOfSize:17.0f];
rem.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
textField = [[UITextField alloc] initWithFrame:CGRectMake(45.0f, 210.0f, 255.0f, 40.0f)];
textField.backgroundColor = [UIColor clearColor];
[_textFields addObject:textField];
[textField setBorderStyle:(UITextBorderStyleNone)];
textField.textColor = [UIColor whiteColor];
[TableControll.view addSubview:rem];
[TableControll.view addSubview:textField];
Basicaly我只是创建一个标题为UNEDITABLE NAME的按钮,其大小是所需textField
的大小。然后我使用width - size of text
创建没有样式的文本字段并将其添加到顶部。不可编辑的文字将无法选择。但我想你可以实现按钮选择文本字段的操作。
希望这有帮助
我会接受大多数赞成回答。
答案 3 :(得分:0)
一种解决方案是检查静态内容(静态文本)是否仍然存在,如果不是,则在shouldChangeCharactersInRange中返回NO。这是一个样本
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSRange prefixRange = [textField.text rangeOfString:@"ENTER YOUR NAME:"];
if(suffixRange.location == NSNotFound) {
return NO;
}
// Only characters in the NSCharacterSet you choose will insertable.
NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:ALPHA] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
ALPHA是 #define ALPHA @“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”