黑马程序员-IOS学习笔记-UITableView、UITableViewCell、UITableViewController

时间:2022-04-10 00:28:38

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、自定义UITableViewCell

一般有两种方式:

1.用一个xib文件来描述UITableViewCell的内容,在设置字符串标示,以便重用。

2.通过代码往UITableVeiwCell的contentView中添加子视图,在初始化方法(比如:init,intiwithstyle:reuseidentifier:)中添加子控件,在layoutStyleviews方法中分配子控件的位置和大小。


二、UITableView的编辑模式

1.UITableView有个editing属性,设置为YES时,可以进入编辑模式。在编辑模式下,可以管理表格中的行,比如改变行的排列顺序、增加行、删除行,但不能修改行的内容。
多种方式开启编辑模式

@property(nonatomic,getter=isEditing) BOOL editing
- (void)setEditing:(BOOL)editing animated:(BOOL)animated

2.删除UITableView的行

 1> 首先要开启编辑模式

 2> 实现UITableViewDataSource的如下方法:


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    // 如果UITableView提交的是删除指令
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // 删除真实数据
         // [self.data removeObjectAtIndex:indexPath.row];
        // 删除UITableView中的某一行(带动画效果)
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        // 如果不考虑动画效果,也可以直接[tableView reload];
    }

3.移动UITableView的行

 1> 首先要开启编辑模式

 2> 实现UITableViewDataSource的如下方法(如果没有实现此方法,将无法换行)


- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
    int from = sourceIndexPath.row;
    int to = destinationIndexPath.row;
    if (from == to) return;
    // 交换数据
    // [self.data exchangeObjectAtIndex:from withObjectAtIndex:to];
}


4.选中UITableView的行

1> 当某行被选中时会调用此方法(UITableViewDelegate的方法)


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //取消选中某一行,让被选中行的高亮颜色消失(带动画效果)
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}


三、UITableView的常用方法

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style  初始化一个UITableView,并且设置表格样式
- (void)reloadData   重新访问数据源,刷新界面
- (NSInteger)numberOfSections  分区的个数
- (NSInteger)numberOfRowsInSection:(NSInteger)section  第section分区的行数
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath  通过indexPath找到对应的UITableViewCell对象
- (void)setEditing:(BOOL)editing animated:(BOOL)animated  是否要开启编辑模式
- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated  取消选中某一行,让被选中行的高亮颜色消失(带动画效果)

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier  通过identifier在(缓存)池中找到对应的UITableViewCell对象
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation  移除indexPaths范围内的所有行


@property(nonatomic,readonly) UITableViewStyle style 表格样式
@property(nonatomic,assign) id <UITableViewDataSource> dataSource  数据源
@property(nonatomic,assign) id <UITableViewDelegate> delegate 代理
@property(nonatomic,getter=isEditing) BOOL editing 是否为编辑模式
@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle  设置分隔线的样式
@property(nonatomic,retain) UIColor *separatorColor  设置分隔线的颜色

@property(nonatomic,retain) UIView *tableHeaderView  表头显示的视图
@property(nonatomic,retain) UIView *tableFooterView  表尾显示的视图
@property(nonatomic) BOOL allowsSelection  是否允许选中行
@property(nonatomic) BOOL allowsSelectionDuringEditing  是否允许在编辑模式下选中行
@property(nonatomic) BOOL allowsMultipleSelection  是否允许选中多行
@property(nonatomic) BOOL allowsMultipleSelectionDuringEditing  是否允许在编辑模式下选中多行


四、UITableViewController

1.是UIViewController的子类,UITableViewController默认扮演了3种角色:视图控制器、UITableView的数据源和代理。


2.UITableViewController的view是个UITablView,由UITableViewController负责设置和显示这个对象。UITableViewController对象被创建后,会将这个UITableView对象的dataSource和delegate指向UITableViewController自己。