簡體   English   中英

UITextField-開頭和結尾均不可編輯的前綴字符

[英]UITextField - uneditable prefixed characters both in beginning & end

我有一個UITextField,我想給它不可編輯的字符。 例如,我有"Hello..." ,並且我希望用戶在o和之間書寫. 例如"Hello userTypedStuff..."

我使用了這種方法,但是,用戶可以長按開頭,例如轉到Hello內的位置。 因此,用戶可能會弄​​混前綴字符。

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let protectedRange = NSMakeRange(0, 5)
    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
}

如何設置“不可編輯的前5個字符和后3個字符”之類的內容?


編輯:UITextField的文本對齊中心,並在UILabel上方形成。 但是,如果給textField標簽的寬度,則textField的寬度不會變大。 因此,我給出了其寬度視圖的寬度。 有沒有一種方法,我可以在其兩端創建的UILabel Hello...分開,並且具有自動伸展寬度中間文本框(文本對齊中心)?


編輯2:

如果我的文本視圖的兩邊都帶有兩個靜態UILabel,則可以解決。 但是,這一次,隨着用戶開始輸入,UITextField不會將UILabel推向側面。TextField居中為textAligned。 如果我在創建它時給它一個恆定的寬度(使用CGRectMake編程),它將不會隨着用戶的輸入而擴展其寬度。因此,我給它提供了視圖的寬度。 有沒有一種方法可以在用戶鍵入內容時自動拉伸TextField的寬度,從而將UILabel推向側面?

 "Hello" [textfield] "..."
 uilabel             uilabel
class SpecialTextField: UITextField {

// MARK: - UITextField Observing
override internal func willMoveToSuperview(newSuperview: UIView!) {
    if newSuperview != nil {
        text = "Hello..."
        addTarget(self, action: #selector(SpecialTextField.didChangeText), forControlEvents: .EditingChanged)
    }
}

override internal func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
    return false
}


private var newVal: String = "Hello..."

func didChangeText() {
    var userDidEditDefaultValue = true
    if (text?.characters.count > 7) { // Count of "Hello..."
        if text?.rangeOfString("Hello") != nil {
            if text?.rangeOfString("...") != nil {
                userDidEditDefaultValue = false
            }
        }
    }
    if userDidEditDefaultValue {
        text = newVal
    }
    newVal = text ?? "Hello..."
}
}

這將不允許用戶更改默認值“ Hello ...”或“ Hello userEntry ...”

您可以使用委托方法在中間插入文本。

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM