2012-01-08 3 views
0

Я пытаюсь создать «ярлык» с разными стилями для разных слов, вроде как описано here. Проблема - насколько я вижу, реализация MonotTouch UATextLayer не позволяет присваивать NSAttributedString свойство String, поскольку свойство String имеет строку типа.CATextlayer с AttributedString в MonoTouch

Это ошибка в реализации или есть другой способ сделать это?

(Да, я знаю, что могу добавить отдельные ярлыки, но я бы предпочел, чтобы не было лучшего решения).

EDIT (в ответ на ответ от Miguel):

После изменения в GetHandler и коррекции в «void_objc_msgSend_IntPtr» вместо «void_objc_msgSend_IntPrt» кода в ответ компилируется и работает, но это не совсем работает в любом случае (я был немного быстрым, отмечая это как ответ). Ошибок не возникает, но текст не отображается.

Код:

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); 

Если я раскомментировать _textLayer.String=_text я вижу текст (но без атрибутов, конечно), так что проблема не с слоя.

ответ

1

На данный момент, вы можете попробовать:

using MonoTouch.ObjCRuntime; 

var caTextLayer = new CATextLayer(); 
var nsa = new NSAttributedString(); 
[..] 
Messaging.void_objc_msgSend_IntPrt (
    caTextLayer.Handle, 
    Selector.sel_registerName ("string"), 
    nsa.Handle); 

В качестве альтернативы, вы можете скачать этот предварительный просмотр предстоящей версии:

http://tirania.org/tmp/monotouch.dll 

Он реализует свойство AttributedString в CATextLayer, которые вы можете установить.

+0

Кажется, sel_registerName является частным и не может быть вызван из другого класса, я чего-то не хватает ...? – Johan

+0

... Я сам узнал: Selector.GetHandle («string») – Johan

+0

Отредактировал мой вопрос для дальнейшей помощи, так как я не совсем понял, как это работает ... – Johan

 Смежные вопросы

  • Нет связанных вопросов^_^