UITextfield uneditable field
我希望在其中包含不可编辑的常量文本的文本字段,例如:
1
|
ENTER YOUR NAME:
|
点击文本字段会在 :
之后获得光标
用户也不能删除或编辑”ENTER YOUR NAME:”。
我该如何实现呢?
- (抱歉。我误解了你的问题。)
- UITextField 旁边有标签吗?在 UITextField 中包含静态文本似乎是一种糟糕的方法,因为您每次都必须对值进行子串化。
将文本字段的委托设置为 UITextFieldDelegate 实现的实例,并使用 textField:shouldChangeCharactersInRange:replacementString: 方法查看用户是否尝试更改 ENTER YOUR NAME: 字符串:
1
2 3 4 5 6 7 |
– (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; } |
我认为没有办法直接放置光标,但您可以在初始文本的尾随冒号后进行空选择,如本答案中所述。
一种解决方案是检查您的静态内容(静态文本)是否仍然存在,如果不存在,则在 shouldChangeCharactersInRange 中返回 NO。这是一个示例
1
2 3 4 5 6 7 8 9 10 11 |
– (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSRange prefixRange = [textField.text rangeOfString:@“ENTER YOUR NAME:”]; |
阿尔法是
#define ALPHA @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”
我设法以一种有点棘手但简单的方式完成了它。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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]; |
基本上我只是创建标题为 UNEDITABLE NAME 的按钮,其大小是理想 textField 的大小。然后我使用 width – size of text 创建没有样式的文本字段并将其添加到顶部。无法选择不可编辑的文本。但我想你可以实现按钮的动作来选择文本字段。
我没有足够的声誉,或者我只是发表评论,但 Omar 的建议是使用 UILabel,在你的情况下会说”输入你的名字:”,然后将你的 UITextField 放在远离那个标签,你想控制光标的位置。
为了让它看起来更漂亮,你可以放一些背景文本字段样式的图像(我就是这样做的),或者将 UILabel 的默认背景拉伸到所需的长度,然后确保 UITextField 的子视图位于标签的上方。
来源:https://www.codenong.com/13456629/