2016-06-29 12 views
0

Gibt es eine Möglichkeit, ein UITextField innerhalb des Bereichs eines NSAttributedString innerhalb eines UITextView anzuhängen?UITextField in UITextView?

Ich möchte etwas wie folgt neu erstellen:

enter image description here

Wenn der Benutzer die leeren Zeilen wäre in der Lage zu drücken, um Text einzugeben.

- (CGRect)textFieldFrameForCharacterRange:(NSRange)charRange inTextView:(UITextView *)textView { 
    NSRange glyphRange = [textView.layoutManager glyphRangeForCharacterRange:charRange actualCharacterRange:NULL]; 
    CGRect boundingRect = [textView.layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:textView.textContainer]; 
    return boundingRect; 
} 

und es dann als ein Subview der UITextView hinzu:

+1

Sieht für mich wie ein 'UIStackView' aus 8 Panels einer benutzerdefinierten' UIView'/'UITextView' Unterklasse aus –

Antwort

0

Sie könnten einen Rahmen für die UITextField wie so berechnen. Das Bestimmen eines Zeichenbereichs, der an die obige Methode übergeben werden soll, kann ebenfalls einfach sein. Suchen Sie einfach nach einer Folge von Unterstreichungen oder nach einem benutzerdefinierten Attribut, das - enumerateAttribute:inRange:options:usingBlock: verwendet.

Der Haken ist, dass dies nicht richtig funktionieren wird, wenn die Unterstreichungen in mehr als eine Zeile aufgeteilt werden, aber UITextField würde sowieso nicht passen. Sie müssen also sicherstellen, dass die Unterstreichung nicht unterbrochen wird. Das U + 2060 Unicode-Zeichen kann helfen, siehe Prevent line break in a NSAttributedString für mehr. Eine NSTextAttachment mit der Unterstreichung, die als ein Bild dargestellt wird, würde auch garantiert keine Wortumhüllung erhalten.

Alternativ können Sie eine UITextViewDelegate oder möglicherweise sogar eine UITextView Unterklasse implementieren, die Auswahl und Bearbeitung außerhalb der Unterstreichungsbereiche nicht erlaubt. Auf diese Weise können Sie die Seltsamkeit von UITextField s innerhalb UITextView s vermeiden. Aber der Nachteil bei dieser Methode besteht auch darin, dass Sie jedes Mal, wenn der Benutzer ein Zeichen eingibt, ein Unterstreichungszeichen löschten. Der Benutzer sieht die Gesamtlänge der Unterstreichung immer noch leicht schwanken.