2015-02-10 94 views
1

我在使用新的Swift語言在UITextField內創建一個前綴的問題。目前,我已創建使用Interface Builder中UITextField和我分配了IBOutlet給它命名爲usernameField,然後使用textFieldDidBeginEditing功能我寫NSMutableAttributedString裏面,命名爲usernamePrefix,只包含文字「C-TAD- 「最後我限制了UITextField最多字符數到13,像這樣:使用Swift在UITextField中的不可編輯的前綴

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()。另外我怎樣才能使usernamePrefix不可編輯和不可刪除的用戶?

感謝您的幫助

回答

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

然後你可以在你的viewDidLoad中設置如下的方法來設置前綴。

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

這對我有效。謝謝傑里米! – 2016-11-30 13:35:17

+0

完美的作品! – 2017-07-21 04:28:06

+0

完美謝謝你。 – 2017-12-20 07:25:58