TableView UITableViewSource 使用详解
TableView UITableViewSource 使用详解
IOS中的 TableView 和android中的listview 类似,都为数据列表类的控件。
在使用 tableView 的时候,tableview 必须指定TableSource.所以我们需要学习UITableViewSource
tableview 中的每个Cell由两部分组成,一个header。一个cell。
如果需要使用header则需要在该tableView 数据结构为 list<entity,list<entity>>.为了方面期间本例使用的entity结构如下 所以 tableSource 中的data 则为 List<entityGroup>
EntityItem
{
……
}
EntityGroup
{
list<entityItem> Items,
……
}
如果为单一Cell 则数据结构list<entity>
该例子介绍 list<entity,list<entity>> 结构数据的加载, 如果 单 list<entity> 可直接忽略 关于header处理的代码即可
需要自定义 UITableViewSource ,如下:
现在 tablesource 的准备工作就绪。
只需要tableview 设置
CustomTableViewSource tablesource = new CustomTableViewSource(data);
tableview.Source = tablesource;
关注 xamarin.ios 系列博客,介绍关于自定xib, tableview 的行选中事件,和 一个超简单实现上啦加载更多数据。
IOS中的 TableView 和android中的listview 类似,都为数据列表类的控件。
在使用 tableView 的时候,tableview 必须指定TableSource.所以我们需要学习UITableViewSource
tableview 中的每个Cell由两部分组成,一个header。一个cell。
如果需要使用header则需要在该tableView 数据结构为 list<entity,list<entity>>.为了方面期间本例使用的entity结构如下 所以 tableSource 中的data 则为 List<entityGroup>
EntityItem
{
……
}
EntityGroup
{
list<entityItem> Items,
……
}
如果为单一Cell 则数据结构list<entity>
该例子介绍 list<entity,list<entity>> 结构数据的加载, 如果 单 list<entity> 可直接忽略 关于header处理的代码即可
需要自定义 UITableViewSource ,如下:
public class CustomTableViewSource :UITableViewSource { List<EntityGroup> lsdata; public CustomTableViewSource(List<EntityGroup> data) { lsdata = data; } public override int NumberOfSections (UITableView tableView) { return lsdata.Count; } public override int RowsInSection (UITableView tableview, int section) { return lsdata[section].Items.Count; } /// 该方法主要 构造 Header 其中使用的 TabHead 为 自定义的cell。 如何自定义cell或view(xib)详见xamarin系列博客 public override UIView GetViewForHeader (UITableView tableView, int section) { //加载自定义的xib 替换系统提供的header 实现自定义Header 样式 TabHead head = new TabHead (); var views = NSBundle.MainBundle.LoadNib ("TabHead", head, null); head = MonoTouch.ObjCRuntime.Runtime.GetNSObject (views.ValueAt (0)) as ServiceCostTabHead; head.SetData (lsdata[section]); return head; } /// 该方法主要 构造 Cell 其中使用的 ItemCell 为 自定义的cell。 如何自定义cell或view(xib)详见xamarin系列博客 public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) { //加载自定义的xib 替换系统提供的Cell 实现自定义Cell样式 customtablecell cell = (customtablecell)tableView.DequeueReusableCell(“自定义标示”); if (cell==null) { EntityItem item = lsdata[indexPath.Section].Items [indexPath.Row]; item = _serviceCostGroup [indexPath.Section].Items [indexPath.Row]; cell = new ItemCell (); var views = NSBundle.MainBundle.LoadNib ("ItemCell", cell, null); cell = MonoTouch.ObjCRuntime.Runtime.GetNSObject (views.ValueAt (0)) as ItemCell; cell.SetData (item); } return cell; } /// 如果自定义的cell高度不一致,可在此设置 cell的高度,根据实际条件判断返回 float 类型数据。 public override float GetHeightForRow (UITableView tableView, NSIndexPath indexPath) { //if else return 100f; } /// 如果自定义的Header高度不一致,可在此设置 Header的高度,根据实际条件判断返回 float 类型数据。 public override float GetHeightForHeader (UITableView tableView, int section) {//if else return 46f; } }
现在 tablesource 的准备工作就绪。
只需要tableview 设置
CustomTableViewSource tablesource = new CustomTableViewSource(data);
tableview.Source = tablesource;
关注 xamarin.ios 系列博客,介绍关于自定xib, tableview 的行选中事件,和 一个超简单实现上啦加载更多数据。