iOS UITableView 与 UITableViewController实例详解

首先我们需要明确UITableView和UITableViewController的概念。

UITableView是iOS中的一个视图控件,是显示列表数据的主要视图组件,通过UITableView可以方便的展示和管理大量的数据。

UITableViewController则是UIKit库中特定的视图控制器,主要作用是管理UITableView视图。UITableViewController提供了内存管理、数据源管理、滚动管理、编辑、行选中、重用单元格等常用功能,为处理UITableView提供了便利。

下面我们开始介绍iOS UITableView 与 UITableViewController实例详解,并附带两个示例。

一、UITableView实例详解

UITableView的使用流程一般为:创建UITableView→配置UITableView→实现数据源代理和UITableViewDelegate。下面简单介绍以下UITableView的实例详解。

1.创建UITableView

在UIViewController中新建一个UITableView对象,可以通过如下代码:

UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

其中参数style为UITableView的样式,包括Plain和Grouped两种。

2.配置UITableView

UITableView最为常见的配置以及一些样式设置如下:

2.1 设置数据源和代理

UITableView必须实现UITableViewDataSource和UITableViewDelegate协议。

tableView.delegate = self;
tableView.dataSource = self;

设置UITableView的代理和数据源协议,其中delegate和datasource分别是UITableView的两个协议。

2.2 设置表格分割线

  • 隐藏分割线:
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  • 自定义分割线:
tableView.separatorColor = [UIColor redColor];//设置分割线的颜色
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;//设置分割线样式

2.3 设置表头和表尾

tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 100)];

上面代码中tableView的tableHeaderView为UIView类型,通过UIView来实现我们自定义的表头。

tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)];

上面代码中tableView的tableFooterView为UIView类型,通过UIView来实现我们自定义的表尾。

2.4 设置单元格部分属性

  • 设置单元格高度:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 44;
}
  • 设置背景颜色:
cell.backgroundColor = [UIColor whiteColor];
  • 处理选中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"选中了第%ld行", (long)indexPath.row);
}
  • 设置滚动条颜色:
tableView.indicatorStyle = UIScrollViewIndicatorStyleDefault;

3.实现数据源代理和UITableViewDelegate

UITableView的数据源代理委托类主要有以下几个方法:

  • numberOfRowsInSection:返回对应的section有多少行。
  • cellForRowAtindexPath:返回每行的单元格。
  • numberOfSections:返回表格中有多少个section。
  • titleForHeaderInSection:返回每个section的标题。
  • viewForHeaderInSection:返回每个section的头部视图。
  • viewForFooterInSection:返回每个section的尾部视图。

UITableViewDelegate委托类主要有以下几个方法:

  • heightForRowAtIndexPath:每一行的高度。
  • heightForFooterInSection:
  • heightForHeaderInSection:
  • willSelectRowAtIndexPath:
  • didSelectRowAtIndexPath:选中该行的时候调用。
  • willDeselectRowAtIndexPath:
  • didDeselectRowAtIndexPath:取消选中该行的时候调用。
  • willDisplayCell:在cell即将显示的时候调用。

示例一

下面是一个简单的UITableView示例,用于展示数据:

@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSArray *dataSource;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.navigationItem.title = @"UITableView";
    [self.view addSubview:self.tableView];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.dataSource.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellID = @"cellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
    }
    cell.textLabel.text = self.dataSource[indexPath.row];
    return cell;
}

#pragma mark - UITableViewDelegate

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 44;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSLog(@"选中了第%ld行", (long)indexPath.row);
}

#pragma mark - lazy

- (UITableView *)tableView {
    if (!_tableView) {
        _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
        _tableView.delegate = self;
        _tableView.dataSource = self;
    }
    return _tableView;
}

- (NSArray *)dataSource {
    if (!_dataSource) {
        _dataSource = @[@"张三", @"李四", @"王五", @"赵六", @"钱七"];
    }
    return _dataSource;
}

@end

二、UITableViewController实例详解

UITableViewController的使用流程一般为:继承UITableViewController父类→设置UITableView的状态并实现数据源代理和UITableViewDelegate。下面简单介绍以下UITableViewController的实例详解。

1.继承UITableViewControler父类

通过继承UITableViewController,自带了一个tableview,并且重写了UITableViewDataSource和UITableViewDelegate两个协议方法。

@interface TableViewController : UITableViewController
@end

@implementation TableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title = @"UITableViewController";
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellID"];
}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 100;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];
    cell.textLabel.text = [NSString stringWithFormat:@"这是第%ld行", (long)indexPath.row];
    return cell;
}

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

@end

2.设置UITableView的状态并实现数据源代理和UITableViewDelegate

这时,需要设置tableview的属性,具体如下:

@interface TableViewController : UITableViewController
@end

@implementation TableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title = @"UITableViewController";
    // 不显示分割线和滚动条
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.tableView.showsVerticalScrollIndicator = NO;

    // 设置表格区头、区尾和行高
    self.tableView.estimatedRowHeight = 80;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.sectionHeaderHeight = 0.1;
    self.tableView.sectionFooterHeight = 10.0;

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellID"];
}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 100;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];
    cell.textLabel.text = [NSString stringWithFormat:@"这是第%ld行", (long)indexPath.row];
    return cell;
}

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

@end

以上就是对iOS UITableView 与 UITableViewController实例详解的详细讲解,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS UITableView 与 UITableViewController实例详解 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • python实现双链表

    实现双链表需要明确双链表的特点:每个节点都有两个指针,一个指向前一个节点,一个指向后一个节点。双链表的操作包括插入、删除、查找等。接下来,我将详细讲解如何在Python中实现双链表。 1. 定义节点类 class Node: def __init__(self, data): self.data = data # 数据 self.prev = None # …

    other 2023年6月27日
    00
  • tg-net新一代万兆到桌面解决方案

    TG-NET新一代万兆到桌面解决方案攻略 TG-NET新一代万兆到桌面解决方案是一种高速网络传输方案,可以将万兆网络传输速度带到桌面级别。在本攻略中,我们将详细介绍如何实现TG-NET新一代万兆到桌面解决方案,包括硬件和软件的配置。 硬件配置 在实现TG-NET新一代万兆到桌面解决方案时,我们需要准备以下硬件: 一台支持万兆网卡的计算机 一根万兆网线 一台支…

    other 2023年5月8日
    00
  • 详解Java中的封装、继承、多态

    我来详细讲解一下Java中的封装、继承和多态。 封装 封装是一种面向对象编程的概念,它在Java中的实现是使用类和访问控制修饰符来保护数据和行为的访问权限。封装可以让设计者隐藏类的实现细节,将类的接口与实现分离,提高代码的复用性和安全性。 在Java中,我们可以使用public、private、protected和default修饰符来控制访问权限。其中,p…

    other 2023年6月25日
    00
  • WinXp系统死机/停止响应怎么办?xp系统死机时自动重启的方法

    WinXP系统死机/停止响应的解决方法 问题描述 WinXP系统可能会出现死机/停止响应的情况。这时候,有些用户可能会感到无从下手,不知道该怎么解决。本篇攻略将介绍WinXP系统死机/停止响应时的解决方法。 解决方法 方法一:检查硬件问题 打开机箱,检查电脑硬件是否正常连接。 如果发现硬件连接不良或损坏,可以更换相应硬件或重新插拔处理器、显卡等重要硬件。 检…

    other 2023年6月27日
    00
  • dataframe列运算

    Dataframe列运算 在数据处理中经常需要对Dataframe列进行运算,比如对列求和、求平均数等。Pandas提供了方便的方法来执行这些列运算,本文将介绍一些最常用的方法。 创建样本数据 在介绍具体方法之前,先创建一个样本数据,供我们演示使用。 import pandas as pd import numpy as np df = pd.DataFra…

    其他 2023年3月28日
    00
  • Windows环境下vscode-go安装笔记(不支持32位)

    Windows环境下vscode-go安装笔记(不支持32位) 本文将详细介绍在Windows环境下安装vscode-go的步骤。请注意,vscode-go不支持32位系统。 步骤一:安装Go语言环境 访问Go官方网站(https://golang.org/dl/)下载适用于Windows的Go安装包。 打开下载的安装包,按照提示进行安装。选择默认安装路径即…

    other 2023年7月28日
    00
  • SERV-U 的配置文件详解

    SERV-U 的配置文件详解 背景 SERV-U是一款FTP服务器软件,其配置文件是控制Server的行为的核心文件,包括用户、密码、访问权限等内容。因此理解SERV-U的配置文件是极其必要的。 配置文件介绍 SERV-U的配置文件是单一的INIR文件格式,其路径为: \Serv-U\domain\FTPServer.ini 配置文件的结构类似于Window…

    other 2023年6月25日
    00
  • Android QQ HD v5.5发布下载 有很大的改进 附下载地址

    Android QQ HD v5.5发布下载攻略 简介 Android QQ HD v5.5是一款经过大幅改进的高清版QQ应用程序。本攻略将详细介绍如何下载和安装该应用程序,并提供两个示例说明。 下载地址 你可以通过以下方式下载Android QQ HD v5.5应用程序: 官方网站:访问QQ官方网站,在下载页面找到Android QQ HD v5.5的下载…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部