具有text属性的控件的基类?

时间:2019-01-04 17:26:28

标签: c# ios .net xamarin xamarin.ios

我正在尝试创建一个继承自UIPickerViewModel的选择器模型(我将澄清这是我使用Xamarin开发iOS的新手),该模型在其构造函数中带有一个控制参数,它将在其中显示被选择的元素。

我希望能够传递文本字段或标签,而不必为每个字段创建两个不同的模型。是否可以使用基类代替包含Text属性的具体对象?

这是我当前的模型课:

using System;
using TCPClient.TCP;
using UIKit;

namespace TCPClient.Models
{
    public class EncodingPickerModel : UIPickerViewModel
    {
        private readonly UITextField _targetControl;

        public EncodingPickerModel(UITextField targetControl)
        {
            _targetControl = targetControl;
        }

        public override nint GetComponentCount(UIPickerView pickerView)
        {
            return 1;
        }

        public override nint GetRowsInComponent(UIPickerView pickerView, nint component)
        {
            return Enum.GetNames(typeof(EncodingType)).Length;
        }

        public override string GetTitle(UIPickerView pickerView, nint row, nint component)
        {
            if (component == 0) return row.ToString();
            return ((EncodingType)Convert.ToInt32(row)).ToString("F");
        }

        public override void Selected(UIPickerView pickerView, nint row, nint component)
        {
            _targetControl.Text = ((EncodingType)Convert.ToInt32(row)).ToString("F");            
        }
    }
}

我想做的是UITextField _targetControl,它具有一个具有Text属性的通用对象,但是我不知道哪个是基础对象。 UIControl确实没有text属性。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

您可以接受返回返回所选Action<EncodingType>的{​​{1}}而不是传递特定的控件。这样,消费者可以决定需要使用选定的值执行什么操作,并使EncodingType对于任何控件都具有灵活性:

EncodingPickerModel