-3

テキストを含む UILabel があります。

この UILabel を押すと、指が押された場所から 1 つの単語を抽出したいと思います。

インターネットで少し検索しましたが、実装方法についての手がかりがありません。

ここで誰かがそれを行う方法を知っていますか?

前もって感謝します。

4

3 に答える 3

2

この UILabel を押すと、指が押された場所から 1 つの単語を抽出したいと思います。

これは、UILabel で簡単にできることではありません。UILabel は、静的テキストを画面に配置する簡単な方法を意図しています。個々の単語のフレームを決定できる機能は提供されません。

これについては、独自のビューを作成する方がよいでしょう。Core Text を掘り下げて、テキストをレイアウトして描画する必要があります。Core Text は単純な UILabel を使用するよりもはるかに複雑ですが、各単語が画面上のどこに描画されるかを判断するために必要な情報とコントロールを提供します。ビューはその情報を使用して、タッチを単語にマッピングできます。

于 2013-04-08T13:40:32.483 に答える
0

最も簡単な方法は、個々の単語を個別のラベルにすることです。これにより、ラベルに UITapGestureRecognizer を追加し、ラベルに触れたときにそこからテキストを取得するだけで済みます。

ただし、1 つのラベルでそれを行いたい場合は、動作する可能性のある方法の擬似コードを次に示します。

  1. UITapGestureRecognizer をラベルに追加します。タッチすると、タッチの位置を取得します。
  2. NSString の- (CGSize)sizeWithFont:(UIFont *)fontメソッドを使用して、ラベルの文字列全体のサイズを取得します (これを と呼びましょうstringSize)。
  3. ラベルの幅と比較stringSize.widthして、テキストの開始位置を特定します (ラベルが中央揃えまたは右揃えの場合、これはラベルの開始 X 座標ではない可能性があります)。すなわち。startingX = label.width - stringSize.width / 2.
  4. 次に、NSString の- (NSArray *)componentsSeparatedByString:(NSString *)separatorメソッドを使用して、ラベル内の文字列を各単語に区切り、スペース文字を区切り文字として使用します。これを という配列に格納しましょうwordsAr
  5. 変数 を作成し、currentXPosに初期化しstartingXます。
  6. wordsAr次に、 の各単語を調べ、 を使用してその単語のサイズを計算し- (CGSize)sizeWithFont:(UIFont *)font、 に追加する for ループを作成しますcurrentXPos。>= タッチ値の x 位置の場合currentXPos、タップした単語が見つかりました。
于 2013-04-08T13:32:38.573 に答える