Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Eigene NSFormatter, Teil 3

Manchmal ist es erforderlich, von einem Eingabefeld nur die letzte Eingabe zu untersuchen und eine alternative isPartialStringValid-Methode ist für diesen Zweck ausgelegt. Die Methodensignatur hat, neben Zeichenketten, zwei Parameter vom Typ NSRange. Mit ihnen, und einer kleinen Berechnung, ist es möglich, die letzte Eingabe zu ermitteln.
override func isPartialStringValid(
     partialStringPtr:AutoreleasingUnsafeMutablePointer,
     proposedSelectedRange proposedSelRangePtr: NSRangePointer,
     originalString origString: String,
     originalSelectedRange origSelRange: NSRange,
     errorDescription error: AutoreleasingUnsafeMutablePointer) -> Bool
{
    var aRange = NSMakeRange(origSelRange.location,
     proposedSelRangePtr.memory.location - origSelRange.location)

    if let newInput = partialStringPtr.memory?.substringWithRange(aRange)
    {
        println(newInput)
    }

    return true
}
stacks_image_D26AEB33-C3C3-4183-B230-B3C25D94F394
Vielleicht werden Sie fragen, ob der Aufwand an dieser Stelle gerechtfertigt ist. Wenn Sie auf der auf der Tastatur schreiben, wird zwangsläufig ein Zeichen nach dem anderem der Eingabe hinzugefügt und das letzte Zeichen in einer Zeichenkette kann leichter ermittelt werden. Das ist zweifellos richtig, doch unsere Methode ermittelt nicht das zuletzt eingegeben Zeichen, sondern die letzte Eingabe! Wenn Sie einen kopierten Text in das Textfeld einfügen, wird Ihnen anschließend genau dieser Text auf der Konsole ausgeben. Die letzte Eingabe in einem Feld kann mehrere Zeichen enthalten!
stacks_image_E9E2108D-134D-4E2A-8E2A-740E722C460A
Wenn Sie die Methode ebenfalls in der InputFormatter-Klasse implementieren, werden Sie feststellen, dass die erste isPartialStringValid-Methode nicht mehr aufgerufen wird. Sie müssen entscheiden, wie Sie vorgehen wollen. Beide Methoden zu benutzen, ist nicht möglich.

nächste Seite