如何在Xamarin.iOS中绘制TableView


概括

我认为在Xamarin.iOS中生成TableView的方法不是日语组织的,因此我对其进行了总结。 Xamarin.iOS使用UITableViewController的子类和UITableSource的子类。由于C#不能继承一个以上的类,因此它不能像快速编写时那样从Delegate和DataSource继承。

故事板

1.设置TableView和TableViewCell

使用iOS设计器或Interface Builder在视图控制器中设置TableView和TableViewCell。

2.在iOS Designer中,设置TableView Identity的名称

在iOS Designer中,单击创建的TableView。在右下方属性中将任何值设置为"身份名称"。在UITableViewController的子类中使用。据我所知,Interface Builder无法设置TableView标识的名称,但是如果您输入有误,请发表评论。

3.在iOS Designer或Interface Builder

中设置TableViewCell标识符

在iOS设计器或Interface Builder中,单击创建的TableViewCell。 iOS
在Designer中,将右下角的"表视图单元格的标识符"设置为任何值。在UITableViewSource的子类中使用。

Interface Builder可以通过使用XCode搜索找到,因此我将省略它。

1.在ViewDidLoad中,将TableView的Source属性设置为继承UITableViewSource

的子类的实例。

1
2
3
4
5
6
7
public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // 配列でもListでもどちらでも
            var list = new List<string>();
            TableView.Source = new tableViewSource(list);
        }

2.实现一个继承自UITableViewSource类

的子类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class tableViewSource : UITableViewSource
    {
        readonly List<Item> list = new List<string>();
        public SharedTableViewSource(List<string> _list)
        {
            list = _list;
        }

        public override nint RowsInSection(UITableView tableview, nint section)
        {
            return list.Count;
        }

        public override UITableViewCell GetCell(UITableView tableView, Foundation.NSIndexPath indexPath)
        {
            var cell = tableView.DequeueReusableCell("任意の名前");
            var item = list[indexPath.Row];
            cell.TextLabel.Text = item.name; // 任意のプロパティ
            return cell;
        }
    }

您可以执行此操作。

之所以要获取由UITableViewController绘制的数据并传递给Source的原因,是为了获取事件并在绘制的数据发生更改时重新加载(ReloadData)。在此示例中,可以使用TableView.ReloadData()执行ReloadData。