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 ,如下:
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 的行选中事件,和 一个超简单实现上啦加载更多数据。






  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值