J'essaie de créer une "étiquette" avec des styles différents sur des mots différents, un peu comme décrit here. Le problème est - pour autant que je puisse le voir - l'implémentation de UATextLayer dans MonoTouch n'accepte pas l'affectation d'une chaîne NSAttributedString à la propriété String car la propriété String a la chaîne de type.CATextlayer avec AttributedString dans MonoTouch
Est-ce une erreur dans l'implémentation ou existe-t-il une autre façon de procéder?
(Oui, je sais que je peux ajouter des étiquettes séparées - mais je préférerais qu'il n'y ait pas de meilleure solution).
EDIT (en réponse à la réponse de Miguel):
Après avoir changé de GetHandler et de corriger à « void_objc_msgSend_IntPtr » au lieu de « void_objc_msgSend_IntPrt » le code dans la réponse compile et fonctionne, mais il ne fonctionne pas tout à fait de toute façon (j'étais un peu rapide en le marquant comme la réponse). Aucune erreur n'est levée, mais le texte ne s'affiche pas.
code:
string _text="Example string";
if(_textLayer==null) {
_textLayer = new CATextLayer();
_textLayer.Frame = new RectangleF(50,698,774,50);
_textLayer.Wrapped=true;
_textLayer.ForegroundColor=UIColor.White.CGColor;
_textLayer.BackgroundColor=UIColor.Clear.CGColor;
Layer.AddSublayer(_textLayer);
}
//_textLayer.String=_text;
CTFont _font=new CTFont("MarkerFelt-Thin",48);
CTStringAttributes _attrs=new CTStringAttributes();
_attrs.Font=_font;
_attrs.ForegroundColor = UIColor.White.CGColor;
var nsa = new NSAttributedString(_text);
Messaging.void_objc_msgSend_IntPtr(
_textLayer.Handle,
Selector.GetHandle("string"),
nsa.Handle);
Si je décommenter le _textLayer.String=_text
je vois le texte (mais sans attributs bien sûr), de sorte que le problème est pas avec la couche.
Il semble que sel_registerName est privé et ne peut pas être appelé d'une autre classe, ai-je oublié quelque chose ..? – Johan
... Je me suis découvert: Selector.GetHandle ("string") – Johan
Edité ma question pour plus d'aide puisque je ne suis pas tout à fait le faire fonctionner ... – Johan