我在使用新的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不可编辑且用户不可删除?
感谢您的帮助
答案 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');
}