2017-06-06 3 views
0

Ich habe die folgende UIButton, um ein Kontrollkästchen und Label; iOS UIButton rendering as checkboxUIButton Label Erkennung Tippen Sie auf bestimmten Text

Um dies zu schaffen, habe ich eine UIButton Kontrolle mit einem NSMutableAttributedString „Bedingungen & Bedingungen“ einen anderen Stil für den Rest des Textes zu geben.

Wie bei einem Kontrollkästchen auf einer Webseite möchte ich, dass der Benutzer entweder den grauen Text oder das Bild selbst antippen kann, um das Kontrollkästchen ein- oder auszuschalten.

Aber wenn der Benutzer klickt "Bedingungen & Bedingungen" Ich möchte, dass eine Aktion (z. B. laden Sie eine Begriffe URL).

Dies ist wirklich einfach in Android zu tun, wie Sie checkbox.setMovementMethod(LinkMovementMethod.getInstance()); verwenden können, aber in iOS Ich habe wirklich Mühe, einen Weg zu finden, im Grunde eine Checkbox mit einem Etikett, das einen Link enthält zu erstellen.

Hat jemand das schon einmal gemacht und wie sind Sie vorgegangen?

+0

Diese Links helfen Ihnen. https://stackoverflow.com/questions/20541676/ios-uitextview-or-u-uilabel-with-clickable-links-to-actions –

+0

Möchten Sie auf das Etikett klicken oder wenn der Schalter geändert wird? – Gregga17

+0

Genau wie es auf einer Webseite funktionieren würde - das Klicken auf das "Label" würde auch das Kontrollkästchen markieren - es sei denn, der Benutzer klickte auf "Allgemeine Geschäftsbedingungen", die einen Link/eine Aktion öffnen würden. –

Antwort

0

ich am Ende tun die folgenden für diesen Link überprüfen ;

Erstellt eine UIButton (leere Textbeschriftung) für meine tatsächliche Checkbox und eine UITextView für meine angrenzenden Checkbox Label Text.

Ich habe dann NSMutableAttributedString so verwendet;

class MyViewController: UIViewController, UITextViewDelegate { 

    override func viewDidLoad() { 
     let attributedTermsTitle = NSMutableAttributedString() 
     attributedTermsTitle.append(NSAttributedString(string: "I have read and accept the ", attributes: [NSFontAttributeName:UIFont(name: "My-Font", size: 14)!])) 
     attributedTermsTitle.append(NSAttributedString(string: "Terms & Conditions", attributes: [NSFontAttributeName:UIFont(name: "My-Font", size: 14)!, NSLinkAttributeName: "terms"])) 

     termsText.linkTextAttributes = [NSForegroundColorAttributeName: UIColor.blue] 
     termsText.attributedText = attributedTermsTitle 

     termsText.delegate = self 
     termsText.isSelectable = true 
     termsText.isUserInteractionEnabled = true 
     termsText.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(MyViewController.toggleCheckbox))) 
    } 

    func toggleCheckbox(sender: UITapGestureRecognizer) {  
     termsButton.isChecked = !termsButton.isChecked 
    } 

    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { 

     let link = URL.absoluteString 
     if(link == "terms") { 
      // link to the Terms web page/screen 
     } 

     return false 
    } 

} 

und für die UIButton gab die Klasse;

class CheckBox: UIButton { 
    let checkedImage = UIImage(named: "checkbox_on")! as UIImage 
    let uncheckedImage = UIImage(named: "checkbox_off")! as UIImage 

    var isChecked: Bool = false { 
     didSet{ 
      if isChecked == true { 
       self.setImage(checkedImage, for: UIControlState.normal) 
      } else { 
       self.setImage(uncheckedImage, for: UIControlState.normal) 
      } 
     } 
    } 

    override func awakeFromNib() { 
     self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControlEvents.touchUpInside) 
     self.isChecked = false 
    } 

    func buttonClicked(sender: UIButton) { 
     if sender == self { 
      isChecked = !isChecked 
     } 
    } 
} 

Endergebnis ist, dass sowohl die UIButton und die nicht verknüpften Text des UITextView wird das Kontrollkästchen aktivieren bzw. deaktivieren. Der "Bedingungen & Bedingungen" Text wird mit der Website verlinken oder irgendwo anders segue.

Hoffentlich hilft dies jemand anderen aus.

1

Sie können TTTAttributedLabel verwenden, um ein bestimmtes Teil oder Wort in einem UILabel tappbar zu machen.

Zum Beispiel

label.text = @"Fork me on GitHub!"; // Repository URL will be automatically detected and linked 
NSRange range = [label.text rangeOfString:@"me"]; 
[label addLinkToURL:[NSURL URLWithString:@"meUrl"] withRange:range]; 

Hier mich wird abgreifbar und auf dieses Wort Delegatmethode Klopfen didSelectLinkWithURL aufgerufen wird, und Sie können innerhalb dieser Funktion

(void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url { 
    NSLog(@"link %@", [url absoluteString]); 
    if ([url absoluteString] == @"meUrl") { 
    //implement your logic here 
    } 
    NSLog(@"whole label %@", label); 
} 
+0

Wenn es ein Label wäre, dann könnte ich ja TTTAttributedLabel verwenden - obwohl ich eher ein UITextView verwenden würde - NSAttributedString als eine Möglichkeit, einen Link zum Tippen und UITextViewDelegate zu definieren, um das Drücken der Verbindung zu erfassen, z. https://Stackoverflow.com/a/36604425/263534 Der Grund ist, ich dachte, eine UIButton Erweiterung wäre sinnvoller, da es in erster Linie eine Checkbox ist. –

+0

Ok danke für dein Feedback –

Verwandte Themen