2015-02-10 1 views
1

У меня возникла проблема с созданием префикса внутри UITextField с использованием нового языка Swift. В настоящее время я создал UITextField с помощью Interface Builder, и я назначил IBOutlet к нему, названному usernameField, а затем с помощью функции textFieldDidBeginEditing я пишу NSMutableAttributedString внутри него, названный usernamePrefix, содержащий только слово «C-TAD- "и, наконец, я ограничил число UITextField максимум символов до 13, например, так:Неприменимый префикс внутри UITextField с использованием Swift

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 
    } 
} 

Теперь, как я могу назначить новые параметры в usernamePrefix для того, чтобы дать 2 разные цвета текста, написанного в UITextField? Я хотел бы иметь префикс в .lightGreyColor(), а остальное - в .blackColor(). Также как я могу сделать userernamePrefix un-editable и un-deletable пользователем?

Спасибо за помощь

ответ

8

Для первой части, вы можете реорганизовать метод делегата, как следовать.

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()

Тогда вы можете использовать метод, подобный приведенному ниже в вашем представленииDidLoad, для установки префикса.

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

Это сработало для меня. Спасибо Джереми! –

+0

Работает отлично !!! –

+0

Отлично Спасибо вам большое. –

Смежные вопросы