簡體   English   中英

UITextfield 不可編輯字段

[英]UITextfield uneditable field

我希望文本字段中包含不可編輯的常量文本,例如:

ENTER YOUR NAME: 

點擊文本字段會在以下之后立即獲得光標:

用戶也不能刪除或編輯“ENTER YOUR NAME:”。

任何想法如何實現這一點?

將文本字段的委托設置為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;
}

我認為沒有辦法直接放置光標,但您可以在初始文本的尾隨冒號之后進行空選擇,如本答案所述

我沒有足夠的聲譽,或者我只是發表評論,但 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];

基本上,我只是創建了標題為 UNEDITABLE NAME 的按鈕,其大小是所需textField的大小。 然后我創建沒有樣式width - size of text字段, width - size of text並將其添加到頂部。 不可編輯的文本將無法選擇。 但是我想您可以為按鈕實現操作以選擇文本字段。

希望這可以幫助

我會接受大多數贊成的答案。

一種解決方案是檢查您的靜態內容(靜態文本)是否仍然存在,如果不存在,則在 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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM