Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Objective c UITextfield不可编辑字段_Objective C_Ios - Fatal编程技术网

Objective c UITextfield不可编辑字段

Objective c UITextfield不可编辑字段,objective-c,ios,Objective C,Ios,我希望文本字段中包含不可编辑的常量文本,如: ENTER YOUR NAME: 单击textfield将在: 用户也不能删除或编辑“输入您的姓名” 有什么想法可以实现吗?将文本字段的委托设置为UITextFieldDelegate实现的实例,并使用textField:shouldChangeCharactersRange:replacementString:方法查看用户是否试图更改输入您的姓名:字符串: - (BOOL)textField:(UITextField *)textField s

我希望文本字段中包含不可编辑的常量文本,如:

ENTER YOUR NAME: 
单击textfield将在

用户也不能删除或编辑“输入您的姓名”


有什么想法可以实现吗?

将文本字段的委托设置为
UITextFieldDelegate
实现的实例,并使用
textField:shouldChangeCharactersRange:replacementString:
方法查看用户是否试图更改
输入您的姓名:
字符串:

- (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;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串{
//“输入您的姓名:”占据前16个字符;如果用户尝试
//要更改16个字符范围内的内容,请说“否”
if(range.location<16)返回否;
…在此处检查附加条件
返回YES;
}

我认为没有直接放置光标的方法,但您可以在中所述的初始文本的尾随冒号后进行空选择。

我没有足够的声誉,或者我只想留下一条评论,但Omar建议使用UILabel,在您的情况下,它会说“输入您的姓名:”然后将UITextField放置在离标签有多远的位置,以控制光标的位置

为了让它看起来更漂亮,您可以放置某种背景文本字段样式的图像(我就是这么做的),或者将UILabel的默认背景拉伸到所需的长度,然后确保UITextField的子视图位于标签的子视图之上


-布兰登

我将以多数赞成票接受这个答案

然而,我已经设法以一种有点棘手但简单的方式完成了它

    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];
基本上,我只需创建标题为不可编辑名称的按钮,其大小为所需的
textField
。然后我用
width-size of text
创建没有样式的文本字段,并将其添加到顶部。不可编辑的文本将不可选择。但我想您可以实现按钮的操作来选择文本字段

希望这有帮助


我将以多数赞成票接受答案。

一个解决方案是检查您的静态内容(静态文本)是否仍然存在,如果不存在,只在shouldchangeCharactersRange中返回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@“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz”

(抱歉,我误解了你的问题)。UITEXT字段旁边有标签吗?在UITextField中使用静态文本似乎是一种糟糕的方法,因为每次都必须对该值进行子串。