UITableView和UITableViewCell

一:UITableView
UITableView表視圖。
表示圖在我們?nèi)粘5膇OS開發(fā)中應用非常廣泛。
description:UITableView繼承與UIScrollView。所以UITableView擁有UIScrollView所有的方法和屬性。UIScrollView的一些屬性和方法我就不介紹了,如果有些不清楚可以查看UIScrollView基本應用。
初始化:
UIScrollView擁有自己的初始化方法

- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style

第一種是不分組分格UITableViewStylePlain

UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
屏幕快照 2016-07-30 下午8.46.44.png

第二種是分組分格UITableViewStyleGrouped

UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
屏幕快照 2016-07-30 下午8.46.55.png

初始化后在self.view addSubView:tableView就可以在當前ViewController上添加表視圖了。用鼠標來回滑動一下可以發(fā)現(xiàn)tableView由一行一行的cell組成。
如果我們想利用tableView來創(chuàng)建我們所需要的一些視圖效果我們就要實現(xiàn)它的兩個代理方法:UITableViewDelegate(控制tableView的顯示的代理),UITableViewDataSource(控制tableView的數(shù)據(jù)顯示的代理)。你就記住UITableViewDelegate中的代理方法可以控制tableView的外形長什么樣,UITableViewDataSource中的代理方法可以控制tableView顯示的一些數(shù)據(jù)。
我們需要在頭文件延展中簽訂協(xié)議。并設置簽訂代理。

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

簽訂完代理后就需要實現(xiàn)tableviewsDataSource必須實現(xiàn)的兩個方法

@protocol UITableViewDataSource<NSObject>

@required

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

@optional

這是UItableViewDataSource的頭文件,第一個方法需要我們返回一個NSInterge類型的數(shù)據(jù)。這里表示我們要返回一個section需要返回多少個Row。

return 10;

第二個方法需要我門返回一個UITableVIewCell

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kTableViewCustomCellReuse];

注意:tableView在重用池中取cell之前我門必須先注冊重用池??梢栽赩C的ViewDidLoad的方法中或者在創(chuàng)建tableView的地方注冊。

[self.nameTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kTableViewCellReuse];

運行程序


屏幕快照 2016-08-06 上午11.42.47.png

我們可以給cell添加一些東西
UITableCell系統(tǒng)的cell 擁有imageView,textLabel,detailTextLabel這三個屬性我們可以對cell進行賦一些圖片,標題和副標題
當然我門也可以自定義cell 在我們自定義cell時要將我們自定義的空間添加到contentView上。因為UITableViewCell上會有一個contentView添加在cell上。
在這里補充一下如何自定義cell。
Command + N創(chuàng)建一個文件繼承UITableViewCell。

屏幕快照 2016-08-06 下午2.07.05.png

這里有幾點需要注意的是,當我們自定義cell時我們的初始化方法不再是initWithFrame:而是initWithStyle:reuseIdentifier:
應為在整個cell的生命周期都不會走initWithFrame:這個方法。你可以自己打斷點進行驗證。

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
       // TableViewCell 默認大小 寬320 高44
       // 在初始化時, cell的frame是初始值, 不能為自定義視圖布局
        NSLog(@"初始化時,cell的frame是%@", NSStringFromCGRect(self.frame));
        }
        //添加子view
    _customView = [[UIView alloc] initWithFrame:CGRectZero];
    _customView.backgroundColor = [UIColor orangeColor];
    //contentView顯示內(nèi)容
    [self.contentView addSubview:_customView];
   //初始化方法中,只負責創(chuàng)建
    
   //3. 創(chuàng)建的子試圖應該添加在哪個父試圖
    return self;
}

將自定義的控件加載到cell的contentView上。在初始化的時候不要給自空間的frame配置。我們需要在layoutSubviews的方法里對自控件的frame進行配置。只有在layoutSubviews里配置才能適配多種尺寸的iphone。否則系統(tǒng)默認只適配3.5寸的iPhone。

- (void)layoutSubviews {
   //千萬不要忘記 super layoutSubviews
    [super layoutSubviews];
    NSLog(@"%s時,cell的frame是%@",__FUNCTION__, NSStringFromCGRect(self.frame));
   //layoutSubviews中, 負責給視圖布局
   //不要使用cell的frame去進行視圖布局
   //使用contentView的frame進行布局
    _customView.frame = CGRectMake(0, 0, self.contentView.frame.size.width, 100);
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容