2016-05-08 11 views
0

Ich habe ein UITextField, und ich möchte es nicht editierbare Zeichen geben. Zum Beispiel habe ich "Hello...", und ich möchte der Benutzer in schreiben zwischen o und . wie "Hello userTypedStuff..."UITextField - nicht bearbeitbare vorangestellte Zeichen sowohl am Anfang als auch am Ende

ich diesen Ansatz verwendet, aber das mit, kann der Benutzer Longpress den Anfang und zum Beispiel in die Position innerhalb Hallo gehen. Somit kann der Benutzer mit den vorangestellten Zeichen umgehen.

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 
} 

Wie kann ich etwas wie 'uneditable erste 5 Zeichen und letzte 3 Zeichen' einrichten?


Edit: Die Text zentrierte Mitte des UITextField und bildet über einem UILabel. Wenn ich jedoch textField die Breite der Beschriftung gebe, wird textField nicht breiter. Daher gab ich die Breite der Breite an. Gibt es eine Möglichkeit, ich kann UILabel an beiden Enden mit Hello und ... separat erstellen, und TextField (mit Text ausgerichtetem Zentrum) in der Mitte, die automatisch Breite streckt?


Edit 2:

Wenn ich meine Textview mit zwei statischen UILabels auf beiden Seiten haben, können, dass eine Abhilfe sein. Dieses Mal wird das UITextField UILabels jedoch nicht auf Seiten schieben, wenn der Benutzer beginnt, den Text einzugeben. Das TextField-Center textAligned. Wenn ich ihm beim Erstellen eine konstante Breite gebe (programmatisch mit CGRectMake), wird seine Breite nicht breiter, wenn der Benutzer eingibt. Also gab ich ihm die Breite der Ansicht. Gibt es eine Möglichkeit, die TextField-Breite automatisch zu strecken, wenn ein Benutzertyp die UILabels an den Seiten drückt?

"Hello" [textfield] "..." 
uilabel    uilabel 
+0

Ich glaube, Sie in die richtige Richtung gehen, nur, dass Sie mehrere Bedingungen in shouldChangeCharactersInRange zu verwenden und vielleicht textfieldshouldbegingediting Funktion –

+1

Vielleicht verwenden Sie einfach eine Bezeichnung für statischen Text und für den Rest verwenden, um ein Textfeld –

+0

@AhmadIshfaq Die UITextField ist programmatisch verwenden und das textAlign ist zentriert. Wie kann ich links und rechts einen statischen Text hinzufügen und die Breite des UITextFields als Benutzertypen erweitern? Ich setze es über das Label und konnte die Breite nicht erweitern, nachdem ich die Breite des Labels angegeben hatte. Stattdessen gab ich dem UITextField die Breite der Ansicht. Daher bin ich mir nicht sicher, wie ich ein Label mit meinen Präfixen auf der linken Seite erstellen und schreiben und verschieben kann, wenn der Benutzer eingibt. Können Sie bitte mehr Details geben? – senty

Antwort

0
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..." 
} 
} 

Dies wird Benutzer nicht zulassen, dass Standardwert „Hallo ...“ ändern oder „Hallo ... Userentry“

Sie Delegatmethode in der Mitte zum Einfügen von Text verwenden können.

Ich hoffe, es hat geholfen.

+0

Vielen Dank. Können Sie bitte ein Dummy-Beispielprojekt erstellen, das es zeigt? Ich wäre dankbar. Ich war ein wenig verwirrt darüber, wie der Benutzer zwischen 'Hallo' und' ... 'schreiben müsste, ohne diese vorgefertigten Teile bearbeiten zu können. Wie würde ich das TextField aus meiner Sicht instanziieren? Verwenden Sie einfach view.addSubview? – senty

Verwandte Themen