【问题标题】:Add plus symbol that cannot be edited in text field in ios (objective c) [duplicate]在ios的文本字段中添加无法编辑的加号(目标c)[重复]
【发布时间】:2014-12-27 20:42:18
【问题描述】:

我需要在情节提要上创建一个带有会出现但不可编辑的符号的文本字段。

例如,我们有一个电话号码国家代码 +44。用户可以编辑44,但“+”不能删除。

提前谢谢你。

【问题讨论】:

    标签: ios objective-c uitextfield textfield


    【解决方案1】:

    我建议将“+”设置为 UILabel 中的文本,并将该标签设置为文本字段的 leftView。例如,在 Objective-C 中:

    UILabel *plusLabel = [[UILabel alloc] init];
    plusLabel.text = @" +";
    [plusLabel sizeToFit];
    self.textField.leftView = plusLabel;
    self.textField.leftViewMode = UITextFieldViewModeAlways;
    

    在 Swift 中:

    let plusLabel = UILabel()
    plusLabel.text = " +"
    plusLabel.sizeToFit()
    textField.leftView = plusLabel
    textField.leftViewMode = UITextFieldViewMode.Always
    

    【讨论】:

    • 如果“+”实际上不需要成为文本的一部分,这很方便。当然,您可以在任何时候访问文本字段的文本属性时附加它。
    • @AndrewMonshizadeh 是的,我建议这样做(如果需要,然后将 + 附加到文本中),因为如果它实际上是文本字段的一部分,那么需要处理的案例比您的解决方案按原样提供...例如,对于您当前的代码,如果用户决定在“+”之前开始输入,或者如果他们想在输入文本后删除“+”,他们可以;一般而言,如果 + 不可选并且用户无法将文本插入符号移到它之前,则可能是最好的,所以这些情况也需要处理......可能在textViewDidChangeSelection 中。
    • 这确实提供了这一点,并且可能解决了这个问题提出的简单案例。明智的做法是让视图控制器拥有一个用于访问文本字段的文本属性并附加“+”的方法,而不是在任何地方手动进行。如果必须始终将“+”放在首位,则另一种选择是使用[text hasPrefix:@"+"]。但是在只需要包含特定字符的情况下(尽管不限于作为第一个字符)[text rangeOfString:@"+"].location != NSNotFound 可能会更好。
    • 我最终使用了这个解决方案,因为它更容易处理这种特定情况。但是,我同意对于一般情况@AndrewMonshizadeh 的解决方案可能更好。
    • @AndrewMarin 实际上我昨天回答了一个类似的问题,关于使用 shouldChangeCharactersInRange 同时保留前缀以防万一您将来想使用 Andrew 的解决方案:stackoverflow.com/a/27673755/2274694
    【解决方案2】:

    您可以在UITextField 的委托上使用- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 方法来确定是否应允许对文本字段中的字符进行特定更改。使用该方法,您可以通过- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement 组成建议的最终字符串。

    NSString *finalText = [textField.text stringByReplacingCharactersInRange:range withString:string];
    

    然后您可以将最终文本字符串与空字符串进行比较,如果它们相同,则返回NO。这假设您的文本字段的文本以其中的“+”开头。

    if ([finalString isEqualToString:@""]) {
        return NO;
    } else {
        return YES;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2016-10-06
      • 2020-05-09
      • 2012-02-26
      • 1970-01-01
      • 2018-01-17
      • 2014-05-28
      相关资源
      最近更新 更多