6

UITextField新しいSwift言語を使用した内の接頭辞の作成に関して問題があります。現在UITextField、Interface Builder を使用して を作成し、 usernameFieldIBOutletという名前の を割り当て、関数を使用してその内部にusernamePrefixという名前の "C-TAD-" という単語のみを含め、最後に最大文字数を制限しました。次のように 13 に番号を付けます。textFieldDidBeginEditingNSMutableAttributedStringUITextField

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つの異なる色を与える必要があるために、 usernamePrefixに新しいパラメータをどのように割り当てることができますUITextFieldか? .lightGreyColor()プレフィックスをに、残りをにしたいと思い.blackColor()ます。また、ユーザーが usernamePrefix を編集および削除できないようにするにはどうすればよいですか?

助けてくれてありがとう

4

3 に答える 3

21

最初の部分では、デリゲート メソッドを次のようにリファクタリングできます。

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
}
于 2015-02-10T16:30:36.647 に答える