問題タブ [nstextstorage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
342 参照

objective-c - NSTextStorage の内容に関する NSLinguisticTagger - クラッシュするバグ

NSLinguisticTagger を使用して NSTextStorage の内容を監視し、ユーザーの入力内容に基づいてコンテキスト情報を提供しようとしています。そのために、この関係を結び付ける OverlayManager オブジェクトがあります。

編集が発生したら、必ずそれをトラップしてタグ作成者に通知します (もちろん、メンバー アクセスに一貫性がないことはわかっています。Obj-C には慣れていないため、後で修正します)。

highlightEdits メッセージは、ジョブを「Overlay」オブジェクトのプールに委任します。それぞれに、次のようなコード ブロックが含まれています。

そして、そこが問題です。enumerateTagsInRange メソッドがクラッシュして、次のメッセージが表示されます。

この問題、基になる文字列の変更可能なコピーにリンクせず、代わりに[[_storage string] copy]. これはすべてメインの実行ループで発生するはずなので、これはスレッドの問題ではないと思います。私がタグを列挙している NSRange は、NSTextStorage文字列の NSLinguisticTagger のビューの両方に存在します。applyHighlightToRange 呼び出しが文字列に属性を追加するという事実さえありません。その行に到達する前にクラッシュするからです。

この問題を回避するテスト ケースを作成しようとしましたが、次のような状況では再現できません。

そのコードはクラッシュしません。

0 投票する
1 に答える
377 参照

regex - 絵文字 NSTextStorage

私は現在、iOS でカスタム NSTextStorage に取り組んでおり、いくつかのハッシュタグ (#)、メンション、および URL を検出する必要があります...この時点ではすべて正常に動作しますが、ユーザーがキーボードから絵文字文字を入力しようとすると表示されません、Helvetica フォントを使用しているためです。

この方法でハッシュタグ、メンション、URL を検出するために正規表現を使用しています。

patternハッシュタグ、URL、またはメンションを検索するための有効な正規表現パターンはどこにありますか。

絵文字を検出するパターンはありますか? どのパターンを使用すればよいか、これ(および他の多くのパターン)を試してみましたが[^\\x{1F601}-\\x{1F64F}\r\n]成功しませんでした。

ありがとう。

0 投票する
1 に答える
575 参照

ios - NSTextContainer でテキストを取得する

NSString コンテンツを含む段落の NSOrderedSet があります。すべてをループすると、大きな文字列が作成され、NSTextStorage が与えられます。しかし、それですべての段落が失われます。

以下のコードを使用すると、ページを数えてコンテンツをページ単位で表示できます。しかし、コンテンツを段落に分けて、ユーザーが特定の段落をいつタップしたかを知りたいです。

NSTextStorage を使用して、コンテンツを単一の大きな文字列としてではなく、小さなテキスト ブロックのコレクションとして表示するにはどうすればよいですか? 注: UIPageViewController を使用してコンテンツを表示しているため、ページごとの段落数も知る必要があります。

ありがとう。

0 投票する
1 に答える
512 参照

ios - NSTextStorage の属性をリセットする方法

iOS 用のテキスト パーサーを試しています。太字、斜体、強調表示などの構文があります。変更を監視し、正しい属性を設定するためにUITextView、 のインスタンスで設定しました。with textNSTextStorageをプリロードすると、うまく機能します。UITextView

ただし、入力しているとき、たとえば次のように入力するとします

それはうまく機能し、黄色で強調表示され、すべて問題ありません。ただし、最後のカーソルのすぐ隣にカーソルを置いて==入力を開始すると、次のようなものが作成されます。

次に、残りのテキストも強調表示されます。

使用する正規表現が問題ではないことはわかっています。そのテキストを事前にUITextView入力すると、正しく解析されるからです。

質問:それで、現在のカーソル位置をテキスト属性なしにリセットするのに助けが必要です。それがテキストビューの最後にある場合、NSRangeException.

ありがとう!

0 投票する
0 に答える
1085 参照

ios - テーブルを含む属性付き文字列を使用すると、iOS 8 で UITextView がクラッシュする

iOS 8 (またはおそらく iOS 7/7.1)NSAttributedStringでは、iOS にテキスト テーブルをレンダリングする機能が追加されました。この API はOS X では公開されていますが、iOS では公開されていません。ただし、テーブルを含む HTML を に渡すことにより、iOS でテキスト テーブルを含む属性付き文字列を作成することができます-[NSAttributedString initWithData:options:documentAttributes:error:]

属性付きの文字列は正しく作成されますが、 を使用して文字列をレンダリングしようとするとUITextView、次の例外がスローされます。

これはバックトレースです:

これは Apple 側のバグだと思い、問題を再現するための最小限のプロジェクトを作成しようとしましたが、できませんでした。テスト プロジェクトでまったく同じ属性文字列をレンダリングするとうまくいきましたが、アプリではまだうまくいきません。テーブルを使用せずに属性付き文字列をレンダリングすると問題なく動作します。これは、テーブルのレンダリングに固有の問題です。他の誰かが同様の問題に遭遇しましたか?

0 投票する
0 に答える
656 参照

ios - NSLayoutManager のテキスト ストレージを置き換える方法

UITextView を持つテーブル ビュー セルを作成しようとしています。このテーブル ビュー セルを再利用するために、新しいテキスト ストレージをレイアウト マネージャーに設定します。ただし、レイアウト マネージャーを新しいテキスト ストレージに追加しても、テキスト ビューのテキスト ストレージは変更されません。

レイアウト マネージャー、テキスト コンテナー、テキスト ビューは次のように設定されます。

テーブル ビュー セルを「構成」するときに、レイアウト マネージャーを新しいテキスト ストレージに追加します。

これは今のところ機能しており、新しいテキストが正しく表示されます。しかし、セルを再利用して (レイアウト マネージャーを別のテキスト ストレージに追加して)、テキスト ビューのサイズを取得すると、…</p>

… 間違ったサイズを取得します。テキスト ビューのプロパティを調べたところ、まだ間違ったテキスト ストレージを指していることがわかりました。

これは本当に奇妙に感じます。スタック全体 (レイアウト マネージャー、テキスト コンテナー、テキスト ビュー) を再度セットアップする必要がありますか?

はいの場合、新しいテキスト ビューを開始し、レイアウトの制約も更新する必要がありますが、これには非常にコストがかかります。

0 投票する
0 に答える
327 参照

ios - 新しい画像の前ではなく最後にカーソルを置きます

ユーザーが画像とテキストを一緒に UITextView に追加して友達と共有するアプリを作成しています。StackExchange他のユーザーのおかげで、画像とテキストを一緒に追加することに成功しました。現在、カーソルの配置に関する小さな問題に直面しています。

テキストを挿入すると、カーソルが期待どおりに移動します。ただし、画像を追加すると、カーソルは画像の後ろに残ります (つまり、最後に挿入されたテキストの終わり)。以下は私のコードです。新しく追加されたテキスト/画像が左ではなく右に追加されるように、新しく挿入された画像の最後にカーソルを移動するにはどうすればよいですか。

編集済み:問題の解決策を見つけました。

次のように 1 つ追加するだけで済みましたselectedRange.location: textView.selectedRange.location += 1