9UITableView和UITableViewController

UITableView和UITableViewController
UITableViewController
1.通常情况下,要通过某个视图控制对象来创建和释放UITableView对象,并负责显示或隐藏视图。
2.UITableView对象要有数据源才能正常工作。UITableView对象会向数据源查询要显示的行数、显示表格行所需要的数据及其他UITableView对象所需的数据。没有数据源的UITableView对象只是一个空壳。凡是遵守UITableViewDataSource协议的OC对象,都可以成为UITableView对象的数据源(即实例变量dataSource所指向的对象)
3.通常情况下,要为UITableView对象设置委托对象,以便能在该对象发生特定事件时做出相应的处理。凡是遵守UITableViewDelegate协议的对象,都可以成为UITableView对象的委托对象 。
UITableViewController对象可以扮演以上全部角色,包括视图控制对象、数据源和委托对象。

创建UITableViewController子类
UITableViewController的指定初始化方法是initWithStyle:。调用initWithStyle:时传入一个类型为UITableViewStyle的常数,该常数决定了UITableView对象的风格。UITableViewStyle常量有两个,UITableViewStylePlain(所有的行都会以矩形外观显示)和UITableViewStyleGrouped(每个表格的第一行和最后一行会以带圆角的矩形外观显示)
应用创建UITableView对象
当前控制器作为UITableViewController的子类,继承了view方法。view方法会调用loadView方法。如果视图不存在,则loadView方法会创建并载入一个空的视图。因为UITableViewController对象的视图类型是UITableView 所以向UITableViewController对象发送view消息会得到一个空的UITableView对象。

UITableView数据源
面向过程的编程模式,就要“告诉”UItableView对象应该显示什么内容,在CocoaTouch中,UITableView对象会自己查询另一个对象以获得需要显示的内容,这个对象就是UITableView的数据源,也就是dataSource属性所指向的对象。以当前控制器对象的UITableView对象为例,UITableView的数据源就是当前控制器对象自己。这里将用于保存实力对象Cake的NSMutableArray对象抽象为CakesStore对象。CakesStore对象会拥有操作数组的功能,例如重排,增加,移除cake实例。CakesStore对象还要负责将这些实例存入文件,或者重文件重新载入。
创建CakesStore(这里我们创建一个实例)

+(CakesStore *)sharedStore{

    static CakesStore *sharedStore = nil;

    if (!sharedStore) {

        sharedStore = [[super allocWithZone:nil] init];//sharedStore方法掉用NSObject的allocWithZone:

    }

    return sharedStore;

}

这段代码将sharedStore指针声明为了静态变量static variable。与局部变量不同,程序不会将静态变量保存在栈中,所以当某个定义了静态变量的方法返回时,程序不会释放相应的变量。也就是说程序只会定义某个静态变量一次(当系统将程序载入内存时),并且永远不会释放该变量。与局部变量相同的是,程序只能在声明某个静态变量的代码段中访问该变量。(以上代码除了sharedStore方法外,其他任何对象或方法不能访问sharedStore指针)。

alloc其实是一个“中转”方法,实际调用的是allocWithZone:。allocWithZone:方法又会掉用名为NSAllocateObject的C函数,并由该函数为对象分配内存。

注意:这里只能在CakesStore的方法中跳过CakesStore已经实现的方法。这是因为向super发送消息,其实是向self发送消息,但是要求系统在查找方法时,跳过当前对象的类,从父类开始查询。

@class的使用,当某个头文件发生变化时,对那些通过@class指令导入该文件的其他文件,编译器可以不用重新编译,这样就可以大幅节省编译时间。

- (instancetype)init {

    self = [super init];

    if (self) {

        allCakes = [[NSMutableArray alloc] init];

    }

    return self;

}

- (NSArray *)allCakes {

    return allCakes;

}

- (Cake *)createCake {

    Cake *c = [Cake randomCake];

    [allCakes addObject:c];

    return c;

}

实现数据源方法Required

 

- tableView:numberOfRowsInSection:

- tableView:cellForRowAtIndexPath:

UITableViewCell对象

UITableViewCell对象有一个子视图:contentView。contentView也包含很多子视图,它的子视图构成UITableViewCell对象的主要外观。此外,UITableViewCell对象还可以显示一个辅助指示视图accessory indicator。辅助指示视图的作用是显示一个指定的图标,用于向用户提示UITableViewCell对象可以执行的动作。这些图标包括勾选标记、展开图标或中间有V型图案的蓝色圆点,辅助指示视图的默认类型是UITableViewCellAccessoryNone。

负责显示UITableViewCell对象所代表的数据,是contentView所包含的三个子视图。textLabel属性和detailTextLabel属性和imageView属性所指向的对象。

    UITableViewCellStyleDefault,//左右图+textLabel

    UITableViewCellStyleValue1,//左右  textLabel大detailTextLabel小

    UITableViewCellStyleValue2,//左右  textLabel小+detailTextLabel大

    UITableViewCellStyleSubtitle//三项

代码片段库

<#代码补全占位符code completion placeholder#>


posted @ 2015-10-13 17:00  captivity  阅读(92)  评论(0)    收藏  举报