問題タブ [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 投票する
1 に答える
327 参照

ios - ユーザーがどこにでも入力したときにUITextViewにデフォルトのNSFont属性を強制的に使用させる方法

2 つの異なるフォントUITextViewで表示されている があります。NSAttributedText想像してみてください: 「ここにサンプルテキストがあります。」

ユーザーが文字 " t "まで削除するか、テキストの中央を選択して "hahaha" と入力すると、新しいテキストはBoldになります。したがって、次のようになります。

テハハハクストのサンプルはこちら」または「サンプルテキストはははここに」

SO:どうすればこれを防ぐことができますか? つまり、UITextViewユーザーが入力を開始したときに、特定のフォントがどこにあるかに関係なく、特定のフォントのみを使用するようにするにはどうすればよいでしょうか。

注: inのtypingAttributesプロパティを設定しようとしましたが、コンテンツのサイズが変更され、うまくいきません。UITextView-textView:shouldChangeTextInRange:

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

objective-c - AppKit でのテキスト幅測定のパフォーマンス

AppKit で多数の NSString オブジェクト (100 万など) の幅を非常に高速に測定する方法はありますか? 私はこれを行うために3つの異なる方法を試しました:

  • [NSString sizeWithAttributes:]
  • [NSAttributedString サイズ]
  • NSLayoutManager (高さではなくテキストの幅を取得)

    いくつかのパフォーマンス メトリックを次に示します 。



    NSLayoutManager は明らかに進むべき道ですが、問題は

  • 重い NSTextStorageオブジェクト が作成されるため、メモリ フットプリントが高くなります(プロファイラによると 1GB 以上) 。
  • 高い作成時間。かかる時間はすべて、上記の文字列の作成中にあり、それ自体が大きな問題です (その後、グリフが作成され配置された NSTextStorage オブジェクトを測定するのに約 0.0002 秒しかかかりません)。
  • 私がやろうとしていることには、7秒はまだ遅すぎます。もっと速い方法はありますか?約 1 秒で 100 万本の弦を測定するには?

    遊んでみたい場合は、こちらが github プロジェクトです。

  • 0 投票する
    1 に答える
    2746 参照

    ios - Swift で文字列を使用して NSTextStorage を初期化する方法

    別の問題をより小さな部分に分解するために、すべての TextKit コンポーネントをセットアップしようとしています。ただし、初期化方法を変更するとクラッシュしますNSTextStorage。テスト目的で、プロジェクトを次のように単純化しました。

    EXC_I386_GPFLTenumerateLineFragmentsForGlyphRangeの例外コードでクラッシュします。そのコードはあまり説明的ではありません。基本的な問題は、私がどのように初期化しているかにかかっているようです。NSTextStorage

    交換したら

    これとともに

    それは動作します。私は何を間違っていますか?

    0 投票する
    3 に答える
    3802 参照

    ios - タップから UILabel の文字のインデックスを取得する

    UILabel でタップされた文字のインデックスを取得したいと思います。UILabel をサブクラス化しました。私のawakeFromNib()にはこれがあります:

    最初の文字をタップし、touchesEnded で 0 のインデックスを取得するように、ラベルの最初の 5 文字に対して希望どおりに機能しています。

    var touchedCharacterIndex = layoutManager.characterIndexForPoint(touch.locationInView(self), inTextContainer: textContainer, fractionOfDistanceBetweenInsertionPoints: nil)

    しかし、UILabel の最初の 4 文字を超えてどこかをタップすると、4 または 0 が返されますが、これは正しくありません。

    ありがとう、

    アップデート

    コメントの提案から、私はこれを追加しました:

    、 、layoutSubviews()、、awakFromNibのセッターでこれを呼び出します。boundsframeattributedTexttext

    そして、テキストの長さが21の場合、最初の文字をタップすると6になるなど、奇妙なインデックスが表示されます.

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

    objective-c - NSTextStorage - テキスト内の戻り文字 (改行) を見つける方法

    NSTextStorage では、次のように現在のポインター位置に時間文字列を挿入します。

    これまでのところ、それは完璧に機能します。しかし、次の行の先頭にポインターを配置したいと考えています。明らかに、これは次の戻り文字の直後です。

    次の戻り文字を見つけて、textStorageそこにポインターを配置する方法は? このタスクのヒントは Web で見つかりませんでした。助けてください ...

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

    ios - iOS: カスタム NSTextStorage を使用した UITextView がクラッシュする

    Swift で iOS 9 アプリケーションを作成しています。UITextView をホストするビュー コントローラーがあり、それにカスタム NSTextStorage オブジェクトを割り当てています。NSTextStorage は今のところ基本的なものです。すべてが正しく機能し、テキストが UITextView に表示されますが、テキストをタップして編集すると、次の例外が発生してアプリケーションがクラッシュします。

    カスタム NSTextStorage オブジェクトを UITextView から削除すると、機能します。

    ビュー コントローラーは、ストーリーボードのモーダル セグエを使用して読み込まれます。テキスト コンテンツを読み込み、viewDidLoad メソッドで UITextView オブジェクトと NSTextStorage オブジェクトを構成します。

    UtilityQueueおよびMainQueue対応するディスパッチ キューへの参照を保持するヘルパー コンテンツです。

    私のカスタムNSTextStorageクラスは次のようになります。

    何か案は?よろしくお願いいたします。