我正在尝试在不同的单词上创建一个具有不同样式的“标签”,类似于描述here。 问题是 - 据我所知 - UATextLayer的MonoTouch实现不接受将NSAttributedString分配给String属性,因为String属性具有类型字符串。
这是实施中的错误还是有其他方法可以做到这一点?
(是的,我知道我可以添加单独的标签 - 但是当有更好的解决方案时我宁愿不这样做。)
编辑(回应米格尔的回答):
在更改为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
我看到文本(当然没有属性),那么问题不在于图层。
答案 0 :(得分: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
它在CATextLayer中实现了一个可以设置的属性AttributedString。