Xamarin iOS自定义视图

Xamarin iOS自定义视图,第1张

概述我创建了一个自定义视图(从UIView派生的新类).此视图用作我的iOS应用程序中的标题,基本上包含两个名为“Title”和“SubTitle”的标签.我创建了两个匹配的字符串属性,可用于设置“Title”和“SubTitle”标签的文本. 我的问题是,将提供给属性的字符串值(比如使用MvvmCross或仅仅是iOS设计器的绑定)分配给标签的.text属性的最佳位置是什么? 我知道当我覆盖Draw 我创建了一个自定义视图(从UIVIEw派生的新类).此视图用作我的iOS应用程序中的标题,基本上包含两个名为“Title”和“SubTitle”的标签.我创建了两个匹配的字符串属性,可用于设置“Title”和“SubTitle”标签的文本.

我的问题是,将提供给属性的字符串值(比如使用MvvmCross或仅仅是iOS设计器的绑定)分配给标签的.text属性的最佳位置是什么?

我知道当我覆盖Draw(CGRect rect)方法并在此处分配值(并在属性值更改时调用SetNeedsdisplay()方法)它将起作用.然而,调用Draw(CGRect rect)对我来说听起来不对.任何帮助,将不胜感激.

目前我有以下代码:

[Register("MenuheaderVIEw"),DesignTimeVisible(true)]public class MenuheaderVIEw : UIVIEw{    private const int _margin = 5;    private UILabel _Title;    private UILabel _subTitle;    public MenuheaderVIEw()    {        Initialize();    }    public MenuheaderVIEw(CGRect frame)        : base(frame)    {        Initialize();    }    public MenuheaderVIEw(IntPtr p)        : base(p)    {        Initialize();    }    [Export("Title"),browsable(true)]    public string Title { get; set; }    [Export("SubTitle"),browsable(true)]    public string SubTitle { get; set; }    private voID Initialize()    {        autoresizingMask = UIVIEwautoresizing.FlexibleDimensions;        // Create 'Title' label        _Title = new UILabel()        {            Backgroundcolor = UIcolor.Clear,Font = UIFont.BoldSystemFontOfSize(UIFont.SystemFontSize),TextAlignment = UITextAlignment.left,Textcolor = UIcolor.White,Text = "Verbeterapp",TranslatesautoresizingMaskIntoConstraints = false        };        // Create 'SubTitle' label        _subTitle = new UILabel()        {            Backgroundcolor = UIcolor.Clear,Font = UIFont.SystemFontOfSize(UIFont.SystemFontSize),Text = "JCI",TranslatesautoresizingMaskIntoConstraints = false        };        this.AddSubvIEws(new UIVIEw[] { _Title,_subTitle });        SetNeedsUpdateConstraints();    }    public overrIDe voID UpdateConstraints()    {        if (NeedsUpdateConstraints())            SetupContraints();        base.UpdateConstraints();    }    private voID SetupContraints()    {        var constraints = new List<NSLayoutConstraint>();        var vIEwMetrics = new Object[] {             "TitleLabel",_Title,"subTitleLabel",_subTitle,"margin",_margin        };        constraints.AddRange(            NSLayoutConstraint.FromVisualFormat(                "V:[TitleLabel]-margin-[subTitleLabel]",NSLayoutFormatoptions.AlignAllLeading,vIEwMetrics            )        );         constraints.Add(            NSLayoutConstraint.Create (                _Title,NSLayoutAttribute.left,NSLayoutRelation.Equal,this,1,8            )        );        constraints.Add (            NSLayoutConstraint.Create(                _Title,NSLayoutAttribute.CenterY,-_subTitle.Frame.Height             )        );        AddConstraints(constraints.ToArray());    }}
解决方法 总之:它取决于您的要求(一个平台的小应用程序/原型或多个平台的更大应用程序).因此,您的问题有点基于意见.

你想只分配一次文本吗?然后转到Designer或在代码中设置Text属性.剩下的问题是,您使用每个支持的平台复制文本值.你必须在iOS,AndroID,UWP,windows Phone中设置它……如果你想改变它,那就太痛苦了.

我更喜欢与MvvMCross进行数据绑定.我们几乎在每个项目中使用MvvMCross(从3年开始),因为它提供了严格的视图,数据和服务分离(使用IoC,MvvM,数据绑定,插件,viewmodel到viewmodel导航等现代方法)和很多抽象特定元素.数据绑定机制允许您无任何痛苦地更改查看的值.如果要更改静态字符串,则只需执行一次.如果你是Xamarin,Mobile和/或MvvM的新手,它当然会增加一个可能难以理解的额外级别,但它是完全值得的.

总结

以上是内存溢出为你收集整理的Xamarin iOS自定义视图全部内容,希望文章能够帮你解决Xamarin iOS自定义视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1048462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存