第八章 UITableView 翻译


一,UITableView用于显示列表,可以选择、删除、重排列;


二,UITableView需要实现UITableViewDataSource和UITableViewDelegate接口的辅助类,这些在UITableViewController都实现了。


三,创建UITableViewController实例,会在它的loadView中创建UITableView


四,BNRItemStore  model

       1,使用单实例的方式创建BNRItemStore对象

       2,在方法中直接创建static对象,这样对象就无法被回收

             static BNRItemStore *sharedStore = nil;

      3,数据对内开放,对外封闭

            

@property (nonatomic, readonly) NSArray *allItems;

- (NSArray *)allItems
{
<span style="white-space:pre">	</span>return self.privateItems; //覆盖了get方法  虽然这样,但是ios中返回类型无法修改返回对象的类型,也就是说外部仍旧可以操作这个对象; 可以使用array的copy来返回一个immutable对象
}

@property (nonatomic) NSMutableArray *privateItems;

- (instancetype)initPrivate
{
self = [super init];
if (self) {
_privateItems = [[NSMutableArray alloc] init]; //内容可以修改内容
}
return self;
}

五,UITableViewDataSource 

        1,UITableView显示时,至少需要向它的dataSource请求tableView:numberOfRowsInSection: and tableView:cellForRowAtIndexPath:.

         2,

- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return [[[BNRItemStore sharedStore] allItems] count];
//section用于分块,比如可以根据名字字母进行分块
}

六,UITableViewCells

        1,adapter,返回item的view

        2,默认的cell已经提供了布局,你可以根据需求选择想要的布局

        3,使用dataSource的tableView:cellForRowAtIndexPath:来返回cell


七,重用cell

       1,需要重用cell,避免内存崩溃

       2,有一个cell池,缓存cell

       3,如果有多种类型的cell,有可能出现获得错误类型的cell,避免的方法是在为cell设置类型;

        

<span style="font-family: Arial, Helvetica, sans-serif;">- (UITableViewCell *)tableView:(UITableView *)tableView</span>
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{<pre name="code" class="objc">// Get a new or recycled cell
UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"forIndexPath:indexPath];NSArray *items = [[BNRItemStore sharedStore] allItems];BNRItem *item = items[indexPath.row];cell.textLabel.text = [item description];return cell;}

 
 

     4,在TableViewController的viewDidLoad中,向tableview注册cell

           

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





你可能感兴趣的:(第八章 UITableView 翻译)