UITextFieldの内部にあるNSAttributedStringの範囲内にUITextFieldを追加する方法はありますか?UITextField内のUITextField?
私はこのような何か再作成したい:ユーザーがテキストを入力するために、空行を押すことができるだろう
を。
UITextFieldの内部にあるNSAttributedStringの範囲内にUITextFieldを追加する方法はありますか?UITextField内のUITextField?
私はこのような何か再作成したい:ユーザーがテキストを入力するために、空行を押すことができるだろう
を。
あなたはそうのような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
秒以内に避けることができます。しかし、この方法の欠点は、ユーザーが文字を入力するたびにアンダーライン文字を削除しても、ユーザーは下線の全体の長さがやや変動していることが分かります。
カスタムUIView/UITextViewサブパネルの8つのパネルで構成される 'UIStackView'のように見えます –