0

サーバーからテキストが届きます。1 行または複数行のテキストの場合があります。UILabel にテキストを表示する必要がありますが、これは問題ありません。問題は、同じテキストの特定の部分文字列を見つけたときに UIButton を表示する必要があることです。たとえば、テキストはNitish\n435-234-6543\nIndiaで、次のように表示されます:

Nitish  
435-234-6543  
India  

したがって、 435-234-6543 を見つけたら、 435-234-6543UIButton を表示する必要があります。

ノート:

  1. テキストは動的です - サーバーから来ます。上記はほんの一例です。
  2. UIButton は UILabel のサブビューになります。

OHAttributedLabelrectForLetterAtIndexなど、さまざまな方法を試しました。しかし、成功しません。私の考えは、部分文字列が見つかったときにボタンを作成し、部分文字列のNSRangeに基づいてボタンのフレームを設定することです。これは可能性がありますか?どうすればそれができますか?または、これを行う他の方法はありますか?

それは私が心配しているアプローチだと思います。

4

3 に答える 3

0

1)簡単な解決策:

UITextViewUILabelを作成し、プロパティdataDetectorTypesを使用して電話番号をリンクとして自動的に設定します。


2)より複雑な解決策:

テキストを描画する必要があるサイズを決定する便利な方法があります。

CGSize size = [label.text sizeWithFont:label.font 
                     constrainedToSize:CGSizeMake(label.frame.size.width, CGFLOAT_MAX) 
                         lineBreakMode:UILineBreakModeWordWrap];

これで、文字列を次の行に分割することで、どのフィールドが電話番号であるかを判別できます。

NSArray *comp = [label.text componentsSeparatedByString:@"\n"];

次に、どちらが数値かを確認します。heightここで、変数のから正確なフレームを計算する必要がありますsize。おそらく次のようになります。

CGFloat positionOfNumber; // the index of your line in comp cast to CGFloat
CGFloat buffer = 10; // fiddle with this
CGFloat buttonHeight = (size.height- 2*buffer)/[comp length];
CGFloat buttonY = buffer + positionOfNumber * buttonHeight;
CGRect buttonFrame = CGRectMake(0, buttonY, label.frame.size.width, buttonHeight); 
于 2012-01-14T09:32:20.533 に答える
0

-->位置を計算しようとしましたが、成功しませんでした。位置を計算するのは大変な作業のようです。私がすぐに思いつく解決策の 1 つは、なぜ 1 つまたは 2 つのラベルと 1 つのボタンを使用しないのかということです。

仮定する。Web サービスから取得した動的文字列は「Nitesh-56789-Test」です。

  1. 「56789」などの文字列の範囲を検索します。
  2. その範囲の開始位置の前の文字列を 1 つのラベルに割り当てます。つまり、"Nitesh" をラベル 1 に割り当てます。
  3. ここで、検索された文字列をテキスト (56789) として持つカスタム ボタンを 1 つ追加します。
  4. ここで、メイン文字列のサブ文字列の後に何かがあるかどうかを確認してください。ここでは、検索文字列 "56789" の後も "Test" が残っているので、3 番目のラベルに割り当てます。


ここでは、sizeWithFont メソッドを使用して動的な高さ幅の計算を使用して、すべてのラベルとボタンのフレームを把握する必要があります。

于 2012-01-14T10:28:57.470 に答える