使用Swift在UITextField中使用不可编辑的前缀

时间:2015-02-10 15:05:47

标签: swift uitextfield nsmutableattributedstring

我在使用新的UITextField语言在Swift内创建前缀时遇到问题。目前我使用Interface Builder创建了UITextField,并为其分配了IBOutlet,名为 usernameField ,然后使用textFieldDidBeginEditing函数编写了一个{其中{1}}名为 usernamePrefix ,仅包含单词“C-TAD-”,最后我将NSMutableAttributedString最大字符数限制为13,如下所示:

UITextField

现在,我如何为 usernamePrefix 分配新参数,以便为class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet var usernameField : UITextField! private var usernamePrefix = NSMutableAttributedString(string: "C-TAD-") func textFieldDidBeginEditing(textField: UITextField) { if textField == usernameField { if usernameField.text == "" { usernameField.attributedText = usernamePrefix } } usernameField.addTarget(self, action: "textFieldDidChangeText:", forControlEvents:UIControlEvents.EditingChanged) } func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { let maxUsernameLength = countElements(usernameField.text!) + countElements(string!) - range.length return maxUsernameLength <= 13 } override func viewDidLoad() { super.viewDidLoad() usernameField.delegate = self passwordField.delegate = self } } 中的文字提供2种不同的颜色?我想在UITextField中添加前缀,其余在.lightGreyColor()中。另外,如何让usernamePrefix不可编辑且用户不可删除?

感谢您的帮助

3 个答案:

答案 0 :(得分:12)

对于第一部分,您可以重构您的委托方法,如下所示。

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    //This makes the new text black.
    textField.typingAttributes = [NSForegroundColorAttributeName:UIColor.blackColor()]
    let protectedRange = NSMakeRange(0, 6)
    let intersection = NSIntersectionRange(protectedRange, range)
    if intersection.length > 0 {

        return false
    }
    if range.location == 12 {
        return true
    }
    if range.location + range.length > 12 {
        return false
    }
    return true
}

这将锁定13的长度,并且不能删除前缀。输入的所有内容都是UIColor.blackColor()

然后,您可以在viewDidLoad中使用类似以下的方法来设置前缀。

func makePrefix() {
    let attributedString = NSMutableAttributedString(string: "C-TAD-")
    attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.lightGrayColor(), range: NSMakeRange(0,6))
    textField.attributedText = attributedString
}

答案 1 :(得分:6)

更简单的选择是设置leftView中的UITextField并根据自己的喜好对其进行自定义:

let prefix = UILabel()
prefix.text = "C-TAD-"
// set font, color etc.
prefix.sizeToFit()

usernameField.leftView = prefix
usernameField.leftViewMode = .whileEditing // or .always

它是不可编辑且不可删除的,您无需进行任何计算即可检查输入的长度。

答案 2 :(得分:0)

我采用了杰里米(Jeremy)的解决方案,并做了一些改进,使其更加快捷,并且可以处理用户在文本字段中粘贴多个字符的情况。

public openPDF() {
  this.iab.create('assets/docs/doc.pdf', '_system', 'location=yes');
}