2016-06-29 10 views
0

UITextFieldの内部にあるNSAttributedStringの範囲内にUITextFieldを追加する方法はありますか?UITextField内のUITextField?

私はこのような何か再作成したい:ユーザーがテキストを入力するために、空行を押すことができるだろう

enter image description here

を。

+1

カスタムUIView/UITextViewサブパネルの8つのパネルで構成される 'UIStackView'のように見えます –

答えて

0

あなたはそうのようなUITextFieldのためのフレームを計算することができます:その後、

- (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; 
} 

UITextViewのサブビューとして追加します。上のメソッドに渡す文字の範囲を決めることも簡単です。下線の行を検索するか、または- enumerateAttribute:inRange:options:usingBlock:を使用するカスタム属性を検索するだけです。

アンダーラインが複数の行に分割されていても、UITextFieldがその場合に適合しない場合、キャッチは正しく動作しません。したがって、アンダーラインが途切れないようにする方法が必要です。 U + 2060のユニコード文字が役に立ちます。詳細はPrevent line break in a NSAttributedStringを参照してください。イメージとして下線が表示されているNSTextAttachmentも、ラップされないことが保証されます。

また、UITextViewDelegate、または場合によってはUITextViewサブクラスを実装して、下線範囲外の選択と編集を禁止することもできます。そうすれば、UITextFieldの奇妙なことをUITextView秒以内に避けることができます。しかし、この方法の欠点は、ユーザーが文字を入力するたびにアンダーライン文字を削除しても、ユーザーは下線の全体の長さがやや変動していることが分かります。