4

テキストの正確な座標に UIButton を配置できるかどうかを知りたいです。

たとえば、私の UILabel には次のテキストがあります。

"アカウントを持っていませんか?サインイン"

斜体のコンテンツでは、ボタンを配置する必要があります。このボタンをタッチすると、サインイン ビューを開くアクションがトリガーされます。

何もせずに他の言語で同じように動作するために、この機能をうまく作ることが非常に重要です:)

ありがとう

4

5 に答える 5

8

これは、同じ問題を抱えた他の開発者にとって役立つ可能性があるためです。

1 : UITextViewDelegate メソッドを実装する必要があります。 - (BOOL)textView:shouldInteractWithURL:inRange:

実装は非常に簡単です。基本的には、受け取ったリンクを NSURL で比較します。多くのリンクがある場合、NSURL コンポーネントを使用してホストごとに比較するのが好きです。次に例を示します。

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
  NSString *urlScheme     = URL.scheme;
  NSString *host          = URL.host;

  if([urlScheme isEqualToString:@"myapp"])
  {
    if([host isEqualToString:@"/signin"])
      [self.onSignRequest( self )];
  }

  return YES;
}

このメソッドは、ユーザーがリンクをタッチしたときに呼び出されます。

2NSString : 2 つのインスタンスを作成します。1 つは文字列用"Don't have an account?"、もう 1 つは文字列用です。"Sign Up"

NSString *labelText = @"Don't have an account? ";
NSString *linkedText = @"Sign Up";

3NSMutableAttributedString :両方の文字列を連結してインスタンスを作成します。

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:[AttributedText attributedStringWithText:[NSString stringWithFormat:@"%@%@", labelText, linkedText]
                                                                                                                                          font:[UIFOnt systemFontOfSize:14.f]
                                                                                                                                         color:[UIColor blueColor]]];

4 : 前に作成した変更可能な属性付き文字列から、リンクされたテキストの範囲を作成します。

NSRange range = [[attributedString  string] rangeOfString:linkedText];

5 : 文字列を作成して

5 : 手順4NSLinkAttributeNameで作成した範囲を使用して、変更可能な文字列に新しい を追加します。

[attributedString addAttribute:NSLinkAttributeName value:URLStringLink range:range];

6attributedText : のプロパティを使用して、変更可能な文字列を UILabel に追加します。UILabel

_label.attributedText = attributedText;

7 : ラベルのデリゲートを設定します。

_label.delegate = textViewDelegate;

以上です。「タッチ可能な」リンクを追加する必要がある人にとって、これが役立つことを願っていますUILabel

乾杯、

于 2014-11-07T01:01:31.503 に答える
0

私は似たようなものを実装しました。Interface Builder の View Controller に Tap Gesture Recognizer を追加し、それをラベルにリンクするだけです。

タップ ジェスチャ レコグナイザーには、コードを挿入できる IBAction メソッドがあります。タップ ジェスチャ レコグナイザーの領域は、自動的にラベルと一致します。

ラベルに属性テキストを使用して、リンクのように表示することもできます (色と下線付き)。

于 2013-06-24T14:54:10.223 に答える
0

最も簡単な方法は、それらを 2 つの異なるラベルにして、ボタン フレームを 2 番目のラベルのフレームに設定することです。より難しい方法は、文字列サイズを作成し、ボタンの CGRect を手動で作成することです。その方法は次のようになります。

CGSize dontSize = [@"Dont have an account?" sizeWithFont:label.font];
CGSize signinSize = [@"Sign In" sizeWithFont:label.font];

//Originate to the whole label's frame
CGRect buttonFrame = label.frame;
buttonFrame.origin.x += dontSize.width;
buttonFrame.size.width = signinSize.width;
于 2013-06-24T14:49:50.783 に答える
-2

UILabel の一部をカバー

  • 2 つの UILabels に分けてから、サインイン ラベルと一致するようにフレームを設定します。
[button setFrame:signinLabel.frame];
[button setCenter:signinLabel.center];

また

  • UIButtonの(ハードコードされた)フレームを適切に設定するまで、座標を推測します

また

  • UILabel から「サインイン」を削除し、UIButton のタイトルにします
于 2013-06-24T15:05:06.983 に答える