Xamarin.iOS UITableView基本使用介绍

今天给大家介绍下我们在开发过程中用的比较多的UITableView控件


首先我们介绍下UITableView的组成部分
1.组头
2.cell
3.组尾
4.cell的index
5.编辑模式

首先我们看看样式图,看看UITableView的几种样式
Xamarin.iOS UITableView基本使用介绍_第1张图片
UITableView.png

组头和组尾设置:
UITableView的单元格可以选择性的去分组,我们可以为每组去设置组头和组尾部分,可以返回字符串,显示在组头或者组尾的label上,也可以自定义组头和组尾的视图。

cell:
cell(单元格)是TableView主要界面元素,我们可以对单元格进行正确的复用,以达到节省内存的功能,我们可以使用系统内置的单元格样式,也可以用代码/xib/storyboard中自定义我们的cell。

index:
索引通常是类似通讯录右侧的一列字符,在索引上触摸或拖动会加快滚动到表的那一部分,索引通常不与分组样式一起使用。

编辑模式:
编辑模式允许我们对cell进行插入,删除,编辑等操作


接着我们说说创建UITableView的几种方式

首先使用代码创建UITableView

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();
    table = new UITableView(View.Bounds); // 默认是 Plain样式
    string[] tableItems = new string[] {"Vegetables","Fruits","Flower Buds","Legumes","Bulbs","Tubers"};
    table.Source = new TableSource(tableItems,this);//我们需要自定义一个类去实现UITableViewSource
    Add (table);
}
//数据源方法
public class TableSource : UITableViewSource {

        string[] TableItems;
        ViewController owner;
        static string identifier = "appCell";

        public TableSource (string[] items)
        {
            TableItems = items;
        }
        public TableSource (string[] items, HomeScreen owner)
        {
            tableItems = items;
            this.owner = owner;

        }
       //多少组数据
       public override nint NumberOfSections(UITableView tableView)
        {
            return 1;
        }
        //每组有多少行数据
        public override nint RowsInSection (UITableView tableview, nint section)
        {
            return TableItems.Length;
        }
        //设置index的内容
        public override string[] SectionIndexTitles (UITableView tableView)
        {
            return keys;
        }
        /// 
        ///设置组头的内容
        /// 
        public override string TitleForHeader (UITableView tableView, nint section)
        {
            return keys[section];
        }
        /// 
        ///设置组尾的内容
        /// 
        public override string TitleForFooter (UITableView tableView, nint section)
        {
            return indexedTableItems[keys[section]].Count + " items";
        }
        //每行的单元格内容
        public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
        {
            //去缓存池去找单元格
            UITableViewCell cell = tableView.DequeueReusableCell (CellIdentifier);
            string item = TableItems[indexPath.Row];

            //如果缓存池里面没有,自己创建单元格并设置重用标识符
            if (cell == null)
            { cell = new UITableViewCell (UITableViewCellStyle.Default, CellIdentifier); }

            cell.TextLabel.Text = item;

            return cell;
        }
        //tableview的点击事件
        public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
        {
            UIAlertController okAlertController = UIAlertController.Create ("Row Selected", tableItems[indexPath.Row], UIAlertControllerStyle.Alert);
            okAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
            owner.PresentViewController (okAlertController, true, null);

            tableView.DeselectRow (indexPath, true);
        }
}

这样我们就可以看到这样一个界面

Xamarin.iOS UITableView基本使用介绍_第2张图片
结果.png

点击之后显示

Xamarin.iOS UITableView基本使用介绍_第3张图片
点击.png

然后说说这个cell的重用问题:
在我们上边的例子里,我们只用到了6个cell,而且一次性全部显示完全,这里我们并没有用到cell重用,但是如果我们cell个数非常多时,如果我们创建这么多的cell会浪费很多内存,这里我们就可以重用cell,但我们的cell从屏幕开始滑离时,不会吗三个销毁而是放到一个缓存池中,当再创建cell时,会根据重用标识符去缓存池中找相应的cell,如果没有就新创建一个cell并赋予这个标识符。

注意事项:
如果你们遇到这个错误:'unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard',这时需要我们向系统去注册一个cell去重用,此时我们需要在viewdidLoad中添加以下代码this.TableView.RegisterClassForCellReuse(typeof(UITableViewCell), identifier);

这样我们用tableview的基本使用就完成了。

接着我们使用UITableViewController去实现

这里我们使用UITableViewController也可以使用代码和可视化界面的方式去实现。

先说一个注意事项:
如果我们使用的控制的基类是UITableViewController,我们在添加控制器的时候不能选择ViewController,应该选择Storyboard View Controller,因为选择ViewController会自动帮我们生成一个同名.xib文件,但是xib文件中不能放UITableViewController;只能使用Storyboard,出现xib文件中放UITableViewController会出错

Xamarin.iOS UITableView基本使用介绍_第4张图片

接下来我们新建一个控制器,往上边拖动一个UITableViewController,选中cell,设置重用标识符

Xamarin.iOS UITableView基本使用介绍_第5张图片

此时我们回到控制器的.cs文件中,改变基类为UITableViewController,设置Storyboard中的UITableViewController绑定类为你新创建的类

Xamarin.iOS UITableView基本使用介绍_第6张图片

然后编写数据源方法,这里我们不再需要单独创建一个类去继承UITableViewSource ,直接在控制器的类中重写上面设置行,列,单元格(组头,组尾,索引可选)即可

Xamarin.iOS UITableView基本使用介绍_第7张图片

这样tableview的两种方式我们都介绍完了。

最后我再给大家介绍下UITableView几个其它的内容:
1.单元格样式

  • Default – UIImageView和Label。
  • Subtitle – UIImageView 和标题Label,子标题Label。
  • Value1 – 子标题Label在右边显示。
  • Value2 – 标题在右边,子标题在左边,没有UIImageView。
Xamarin.iOS UITableView基本使用介绍_第8张图片

2.Accessories
cell的右部区域显示的内容

  • Checkmark – 多选时使用。
  • DetailButton –类似一个按钮,可以相应各种点击事件。
  • DisclosureIndicator –通常在用于跳转页面。
  • DetailDisclosureButton – DetailButton和DisclosureIndicator的结合。
Xamarin.iOS UITableView基本使用介绍_第9张图片

3.分割线
tableview的分割线可以设置颜色,样式,模糊效果,内边距等。

//颜色
TableView.SeparatorColor = UIColor.Blue;
//样式
TableView.SeparatorStyle = UITableViewCellSeparatorStyle.DoubleLineEtched;
 //模糊效果
TableView.SeparatorEffect = UIBlurEffect.FromStyle(UIBlurEffectStyle.Dark);
//内边距
TableView.SeparatorInset.InsetRect(new CGRect(4, 4, 150, 2));

到这里Xamarin.iOS UITableView基本使用的介绍就完成了,希望能对您有所帮助。

——End 有问题可以加我微信,大家一起讨论

Xamarin.iOS UITableView基本使用介绍_第10张图片

你可能感兴趣的:(Xamarin.iOS UITableView基本使用介绍)