UILabel - chaîne, comme le texte et les liens
J'ai un UILabel
dont le texte que j'obtiens à partir d'un serveur. Une partie du texte est d'être identifiés comme des liens, et sur de toucher ces liens, certaines mesures doivent être effectuées. par exemple,
NSString *str = @"Mon numéro de téléphone est 645-345-2345 et mon adresse est xyz";
C'est le texte complet de UILabel
. Je n'ai qu'un UILabel
pour l'affichage de ce texte (le Texte est dynamique. J'ai juste donné un exemple.). En cliquant sur ces liens, j'ai besoin d'exécuter des actions telles que la navigation de quelques différentes de l'écran ou de faire un appel.
Je sais que je peux afficher ce texte avec l'aide de OHAttributedLabel. Et les liens peuvent être affichées comme suit :
[label1 addCustomLink:[NSURL URLWithString:@"http://www.foodreporter.net"] inRange:[txt rangeOfString:someString]];
Mais je me demande comment puis-je faire de ces des liens de texte effectuer certaines actions, comme la navigation à l'écran ou de faire un appel.
Permettez-moi de savoir si plus d'explication est nécessaire.
- À partir de 2013 ... il vous suffit d'utiliser UITextView et cliquez sur "détecter les liens" en interfaceBuilder ... c'est aussi simple que cela.
- stackoverflow.com/questions/10116820/...
- Double Possible de Créer appuyez sur-mesure "liens" dans la NSAttributedText d'un UILabel?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ajouter des actions personnalisées pour n'importe quelle
UILabel
à remplacer les liens de support à l'aide d'un faux schéma d'URL que vous aurez intercepter plus tard:Puis, dans votre
TTTAttributedLabelDelegate
:TTTAttributedLabel est un fork de OHAttributedLabel.
Si vous souhaitez une approche plus complexe, jetez un oeil à Nimbus Attribué L'Étiquette. Il soutien personnalisé liens out-of-the-box.
//
commeaction://show-help
. Sinon, le schéma sera le seul valable propriété url. (tout le reste sera nul sans le double slash).Vous pouvez utiliser UITextView avec les numéros de Téléphone et liens de détection OUI, le défilement personnes handicapées OUI interaction de l'utilisateur activé OUI, au lieu de UILabel.
Mon projet a utilisé avec succès OHAttributedLabel pour cela. Découvrez la
-(BOOL)attributedLabel:(OHAttributedLabel*)attributedLabel shouldFollowLink:(NSTextCheckingResult*)linkInfo;
méthode dans
OHAttributedLabelDelegate
(lien). Il vous permet de décider ce qui se passe lorsque le lien est cliqué. Si vous regardez le code source pour l'exemple de la OHAttributedLabel projet, il est utilisé pour afficher un message d'alerte. Si vous avez retournéNO
dans ce cas (pour garder l'action par défaut de passe trop), vous pouvez simplement faire ce que vous vouliez comme la navigation, etc.Note toutefois que cela nécessite que vous pouvez déterminer l'action correctement, juste du texte. Pour notre projet, nous avons utilisé un peu plus sophistiqué de solution, où le serveur nous a envoyé le texte avec des balises et une liste de commandes à exécuter pour chaque balise.
Il y a un projet appelé FancyLabel qu'est-ce que vous avez besoin. Il pourrait avoir besoin d'un certain degré de personnalisation bien.
Aussi, je pense que Three20 dispose de cette fonctionnalité, mais c'est peut-être trop si vous ne l'avez pas déjà l'utiliser.
Il y a aussi une solution beaucoup plus simple, si tous vos liens sont les téléphones \ adresses \ url. Vous pouvez tout simplement utiliser un UITextView au lieu d'un UILabel. Il dispose d'une détection automatique de téléphones, adresse, etc. (il suffit de cocher les cases de l'IB)
Vous pouvez également avoir des actions personnalisées en réponse à des événements de clic sur ces liens, en substituant openURL, comme expliqué ici
Est-il une raison spécifique que vous devez utiliser un UILabel au lieu d'un UITextView?
Notez que beaucoup de la mise en œuvre des étiquettes attribuées hériter de UIView ou de ne pas mettre en œuvre l'ensemble de UILabel sa fonctionnalité.
Vous pouvez utiliser le bouton personnalisé pour donner un look comme de lien ..vous pouvez Également ajouter geste sur l'étiquette personnalisée si vous ne voulez pas l'utiliser bouton ..
Je ne suis pas un fan d'être obligé d'utiliser
UITextView
ou d'un tiers lib quand tout ce que je besoin est un léger étiquette qui rend les liens (et qui me dit que quand ils sont taraudés!)Voici ma tentative à un léger
UILabel
sous-classe capable de détecter un lien robinets. L'approche est différente des autres que j'ai vu en ce qu'il obtient l'accès à laUILabel
's partagéNSLayoutManager
par l'intermédiaire d'un délégué de rappel ajouté àNSTextStorage
via une catégorie d'extension. La beauté est queUILabel
effectue ses natif de mise en page et de dessin - autresUILabel
remplacements souvent d'améliorer ou de remplacer le natif de comportement avec un supplément deNSLayoutManager
/NSTextContainer
.Probablement App Store coffre-fort, mais un peu fragile - utiliser à vos risques et périls!
https://github.com/TomSwift/TSLabel