1

我正在尝试NSMutableAttributedString使用方法创建和设置其属性SetProperties。但是我的应用程序因错误而崩溃,

MonoTouch.Foundation.MonoTouchException exception - NSInvalidArgumentException Reason: unrecognized selector sent to instance 0xc305d00.*

代码:

var richTask = new NSMutableAttributedString ("Random");
var fda = new CTFontDescriptorAttributes {
    FamilyName = "Courier",
    StyleName = "Bold",
    Size = 18f
};
var fd = new CTFontDescriptor (fda);
var font = new CTFont (fd, 0);

var attrs = new CTStringAttributes { Font = font };
var range = new NSRange (0, 3);
richTask.SetAttributes(attrs, range);

_label.AttributedText = richTask;

这段代码GetCellUITableViewController. 我希望能够仅更改字符串前 3-4 个字母的字体或颜色。

我发现如果我消除Font组件并设置另一个属性,例如StrokeWidth,它工作正常

var attrs = new CTStringAttributes { /*Font = font*/ StrokeWidth = 5f };

所以看起来字体初始化有点不正确。这是为什么?为什么它会使我的应用程序崩溃?

感谢提前!

4

1 回答 1

3

这是一个使用UIStringAttributes替代的示例:

        string line1 = "Don't have Facebook?", line2 = "\nCreate or sign in with an alternate account";
        var attributedString = new NSMutableAttributedString(line1 + line2);

        attributedString.SetAttributes(new UIStringAttributes
        {
            Font = Theme.BoldSmallFont,
            ForegroundColor = Theme.LightGray,

        }.Dictionary, new NSRange(0, line1.Length));

        attributedString.SetAttributes(new UIStringAttributes
        {
            Font = Theme.RegularSmallFont,
            ForegroundColor = Theme.LightGray,

        }.Dictionary, new NSRange(line1.Length, line2.Length));

        _alternateSignIn.SetAttributedTitle(attributedString, UIControlState.Normal);

这是在UIButton. Theme是我自己的静态类,你可以用自己的替换颜色和字体。

你应该能够用UIStringAttributesas with完成同样的事情CTStringAttributes。您可能会针对您的崩溃案例向 Xamarin 发布错误报告:http: //bugzilla.xamarin.com

*注意:属性字符串仅适用于 iOS 6 及更高版本。这是 Apple 添加这些 API 的时候。

于 2013-08-28T13:05:39.690 回答