表格视图UITableView及控制器UITableViewController

UITableView

 tableView是个一维表,这是一个UIScrollView的子类,所以它是一个滚动列表。它可以高度定制化,它从它的两个不同的delegation中获取所有的定制化信息,有data source和delegate这两个不同的properties,data source负责提供表中的数据delegate负责数据显示。如果想显示多维数据,就是有行和列,可以使用sections或者可以把它放进一个navigation controller。

描述plain风格的tableVeiw的各个部分的术语:

最顶上的东西叫header,那是一个UIView,可以添加到表中,它可以是任何你想要的东西。在底部有个footer,也是个UIView。这些被分组的东西叫section,蓝条叫section header,可以用字符串设置或者可以用view,表中的每个row都是一个UIView,叫这个UIView为tableVeiw cell。

使用完全相同的术语描述group风格的tableVeiw:

当有section时,建立tableVeiw并实现data source时得告诉tableVeiw有多少section,然后它会问你每个section里有多少row。

UITableViewDataSource

data source protocol里都有什么方法?有三个要实现的非常重要的方法,一个是表明表里有多少section,二是每个section有多少row,第三个是返回要绘制的每个row的UITableView cell。

来看最后一个方法,这是该方法的的样子:

复制代码
//NSIndexPath要做的就是封装section和row,因此它有两个属性,一个叫section,一个叫row,section会告诉你当前是什么section,row会告诉你这个是当前section里的哪个row
- (UITableViewCell *)tableView:(UITableView *)sender cellForRowAtIndexPath:(NSIndexPath *)indexPath
//返回有多少个分段。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)sender; 
//返回对应的分段有多少个元素,即有多少行。
- (NSInteger)tableView:(UITableView *)sender numberOfRowsInSection:(NSInteger)section;


UITableViewDelegate

UITableViewdelegate控制如何绘制表,不是表中的数据,而是如何显示,比如像cell多高之类。常常data source和delegate是同一个对象,是这个UITableViewController,delegate有很多did/will happen方法,最重要的是它会通知你,当有人点击row的时候。

UITableView实例使用委托是为了响应用户的交互动作 。委托告知表格将响应这些交互的责任移交给指定对象。这个指定的对象通常是拥有表格视图的UITableViewController控制器对象。当然该 委托必须实现UITableViewDelegate协议 。其委托方法基本上定制表格结构的:

  • tableView:heightForRowAtIndexPath 返回指定的row的高度。
  • tableView:heightForHeaderInSection 返回指定分段的header view区域的高度。
  • tableView:heigthForFooterInSection 返回指定分段的footer view区域的高度。
  • tableView:titleForHeaderInSection 返回指定分段的header的title,如果这个section header有返回view,那么title就不起作用。
  • tableView:viewForHeaderInSection 返回指定分段的header的view,若没有,则可以不返回view。
  • tableView:didSelectRowAtIndexPath 当用户选中某个行的cell的时候,回调用这个。前提是必须设置tableView的一个allowsSelection属性为YES才行。
  • tableView:accessoryButtonTappedForRowWithIndexPath 响应用户点击cell右边的箭头事件。
  • tableView:commitEditingStyle: editingStyleforRowAtIndexPath 通知用户编辑了哪个cell。

因此,通过以上理解,我们知道UITableView实例初始化必须设置setDataSource和setDelegate属性,分别指定数据源与委托对象表视图从遵循UITableViewDelegate协议的对象获取配置数据,从遵循UITableViewDataSource协议的对象获得行数据。数据源提供了绘制所需要的所有数据;委托则只是用于配置表视图的外观并处理某些用户交互。代码示例:

复制代码
UITableView *tableview = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)];
 [tableview setDelegate:self];
 [tableview setDataSource:self];
 [self.view addSubview: tableview];
 [tableview release];
复制代码

说明:除了委托方法调用,UITableView实例还提供了通知。通知使用默认NSNotificationCenter广播更新,让应用程序的不同线程之间可以彼此交流。3.0 SDK中唯一的官方表格通知是UITableViewSelectionDidChangeNotification


其实UITableView类继承自UIScrollView,是个特殊的ScrollView,这个滚动控件里主要封装了UITableViewCell单元格控件。默认状态下,所有UITableViewController实例都被自动设为UIScrollView委托。

1. UITableView视图通过tableView属性访问。
2. 几乎任何字符串数组都可以用于设置和填充表格。
3. 要显示表格,必须实现numberOfSectionsInTableView、numberOfRowsInSection、cellForRowAtIndexPath这3个核心方法来定义表格皆结构,并提供内容显示。
4. “可重用单元格”是表格视图节省内存使用的高效方式,对于不同种类的单元格应该使用不同的ID标识符。
5. 在分配新单元格时,必须检查重用单元格是否可用。(即检查dequeueReusableCellWithIdentifier:请求的返回值)
6. 当用户选中某个行的cell的时候,回调方法tableView:didSelectRowAtIndexPath:被触发。
7. 关于表格的样式有两种风格的表视图:UITableViewStylePlain(按索引排序显示)、UITableViewStyleGrouped(按组进行分类显示)。
8. 选定单元格的颜色设置有:UITableViewCellSelectionStyleBlue、UITableViewCellSelectionStyleGray、UITableViewCellSelectionStyleNone三种值。
9. 基本表格视图单元格类型:UITableViewCellStyleDefault、UITableViewCellStyleSubtitle、UITableViewCellStyleValue1、UITableViewCellStyleValue2四种类型。 
10. 一般,我们所谓自定义表视图其实是直接自定义表行数据的显示布局,即通过自定义UITableViewCell单元格。方法无外乎,要么直接向UITableViewCell添加子视图,要么是子类化UITableViewCell来实现。 

摘自:http://www.cnblogs.com/lovecode/articles/2238309.html

http://www.cnblogs.com/geory/archive/2013/02/27/2913618.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在iOS中,一个视图只能有一个UITableView。但是可以通过创建多个UITableView来实现一个视图中显示多个表格的效果。以下是一个示例代码: 首先,你需要在视图控制器中添加多个UITableView的实例变量: ```swift class YourViewController: UIViewController { var tableView1: UITableView! var tableView2: UITableView! // ... } ``` 然后,在视图加载完成后,你可以创建和配置这些UITableView的实例: ```swift override func viewDidLoad() { super.viewDidLoad() // 创建第一个UITableView tableView1 = UITableView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height/2)) tableView1.dataSource = self tableView1.delegate = self view.addSubview(tableView1) // 创建第二个UITableView tableView2 = UITableView(frame: CGRect(x: 0, y: view.frame.height/2, width: view.frame.width, height: view.frame.height/2)) tableView2.dataSource = self tableView2.delegate = self view.addSubview(tableView2) // ... } ``` 接下来,你需要实现UITableViewDataSource和UITableViewDelegate协议的相关方法来提供表格的数据和处理交互事件。例如: ```swift extension YourViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if tableView == tableView1 { // 返回第一个UITableView的行数 return 10 } else if tableView == tableView2 { // 返回第二个UITableView的行数 return 5 } return 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) if tableView == tableView1 { // 配置第一个UITableView的单元格 cell.textLabel?.text = "Table View 1 - Row \(indexPath.row)" } else if tableView == tableView2 { // 配置第二个UITableView的单元格 cell.textLabel?.text = "Table View 2 - Row \(indexPath.row)" } return cell } } extension YourViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if tableView == tableView1 { // 处理第一个UITableView的行选中事件 print("Table View 1 - Row \(indexPath.row) selected") } else if tableView == tableView2 { // 处理第二个UITableView的行选中事件 print("Table View 2 - Row \(indexPath.row) selected") } } } ``` 这样,你就可以在同一个视图中使用多个UITableView了。记得在视图控制器中遵循UITableViewDataSource和UITableViewDelegate协议,并在视图加载完成后设置数据源和代理。 希望这能帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值