2017-01-03 4 views
-1

青い文字列の「利用規約」をクリックして、それをクリックに反応させる必要があります。私はボタンを使用したくないので、どうすればUILabelでこれを行うことができますか? 文字列:[次へ]をタップして続行すると、UILabelでテキストを青色でクリック可能にする

コードは、私が試した利用規約に同意したが、単にテキストの色の変化を得ませんでした:

var myMutableString = NSMutableAttributedString() 
      myMutableString = NSMutableAttributedString(string: self.termsLabel.text! as String, attributes: [NSFontAttributeName:UIFont(name: self.termsLabel.font.fontName, size: self.termsLabel.font.pointSize)!]) 
      myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: NSRange(location:self.termsLabel.text!.characters.count - 12,length:12)) 
      self.termsLabel.attributedText = myMutableString 
+0

UIButtonでないのはなぜですか?これを行うにはいくつかの選択肢がありますが、あなたが望むものになるかもしれません。たとえば、UILabelのbackgroundColorは何ですか? UIContolやそのサブクラスであるUIButtonで得られるものでこの要件が満たされないのはなぜですか? – dfd

+0

あなたが探しているものに似ていますか(http://stackoverflow.com/questions/32309247/add-read-more-to-the-end-of-uilabel)ですか? –

+0

OPにお返事いただきありがとうございます。その場合、答えは正しいです。しかし、おそらく、私たちが知っている以上にこの疑問がある。仮定しないでください!私の本能は、** UIButtonはうまく機能するとは言いますが、一部の担当者とのOPは、私とは異なる理由があるかもしれません。したがって、**まだ**明白ではありません。 – dfd

答えて

1

はUILabelを使用しないでください。 UITextFieldまたはUITextViewを使用し、リンクを含む属性付きテキストをその中にインストールします。その後、リンクに応答する&を検出するデリゲートメソッドを設定します。あなたはUITextViewDelegate方法あなたのリンクをフィールドにRTFファイルの内容をロードすることで設定する最も簡単な方法の

func textView(UITextView, 
    shouldInteractWith: URL, 
    in: NSRange, 
    interaction: UITextItemInteraction) 

つを実装する必要があります。

DatesInSwiftというGitHubのデモプロジェクトは、アプリでURLを呼び出すカスタムURLをトリガーするクリック可能なリンクを作成します。

このプロジェクトでは、UITextViewに@IBInspectableプロパティRTF_Filenameを追加した拡張を使用しています。ロードする必要があるRTFファイルのファイル名にテキストビューのRTF_Filenameプロパティを設定するだけです。

それはスウィフト2のために書かれた私のプロジェクトのように見える、と_のTextView(

FUNCのTextViewに呼ばれたUITextViewDelegate方法、の古いバージョンを使用しています。UITextView、 shouldInteractWithURLのURL:Foundation.URL、 INRANGE characterRange:NSRange) - >は、ブール

+0

クリック可能なテキストの後ろにはURLがありません。それは次の視点に繋がるものです。 – user1079052

+0

手動でテキストの上に置くトランスペアレントなボタンではなく、テキストをクリック可能にしたい場合は、URLが必要です。リンクを投稿したアプリを見ると、カスタムURLスキームを使用してリンクをクリックすると、アプリケーションデリゲートのメソッドが呼び出され、そのリンクがビューコントローラに渡されます。 –

+0

透明なボタンを使用する場合は、ボタンをテキストの上に置くことは挑戦です。特に画面サイズが異なると難しくなります。異なる言語へのローカライズをサポートしていると、本当に難しくなります。 –

0

私は、ボタンのテキストを投げ、このコードを追加した、まさに私が望んでいたことができなかったという結論に達しました

let mainText = "By tapping Next and continuing you agree to the Terms Of Use" 
    let attributeText = "Terms Of Use" 
    let range = (mainText as NSString).range(of: attributeText) 
    let attributedString = NSMutableAttributedString(string:mainText) 
    attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: range) 
    self.termsLabel.attributedText = attributedString 
    let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.goToTOSView)) 
    tapGesture.numberOfTapsRequired = 1 
    self.termsLabel.isUserInteractionEnabled = true 
    self.termsLabel.addGestureRecognizer(tapGesture) 
関連する問題