iOS開發-1.UITableView你會用嗎?

前一段時間,公司招聘了一個新員工,界面做出來了,但是很卡,我看完他寫的代碼,發現沒有對UITableViewCell進行循環使用,而且在UITableView代理方法中,創建了很多并沒有什么用的對象,一些調用頻繁的方法也沒有很好地處理。

首先創建一個UITableView.設置數據源為控制器,并實現數據源方法。


Paste_Image.png

設置行高:

table.rowHeight =70;

既然遵守數據源方法,那就實現數據源方法

Paste_Image.png

返回cell的方法,蘋果默認— 用到時再創建,但是會頻繁的創建,銷毀,造成浪費

所以優化—里面的代碼就先去緩存池子中尋找:(找不到)我們創建

注意點:關于cell的數據,不要放置在判斷里面,因為這個方法只有在一開始創建cell的時候才會調用,后面循環利用的時候就會導致數據錯亂。

Paste_Image.png

被static修飾的局部變量:只會初始化一次,在整個程序運行中,只有一份內存。

 定義重用標識:static NSString*ID = @"cell";
cell的樣式有好幾種:(紅色代表常用)
 UITableViewCellStyleDefault      默認樣式
 UITableViewCellStyleValue1,    樣式一
 UITableViewCellStyleValue2,    樣式二
UITableViewCellStyleSubtitle  帶有子標題模式的樣式

最新cell的循環利用方法:

利用標識來注冊一個帶有標識的cell:(前提:通過stroyBoard創建的UITableView,那么要拖線拿到它)

Paste_Image.png

這個只注冊一次,所以在ViewDidLoad中注冊

好處:不用判斷緩存池子的cell是否為空,只要注冊了cell,那么創建出來絕對有值。

TableView代理方法:
代理方法肯定要遵守代理協議:

@interfaceViewController ()<UITableViewDelegate>
Paste_Image.png

常用代理方法:

Paste_Image.png

每一行的高度也可以這樣設置— self.tableView.rowHeight = 100;

當時上面的高度方法可以搞定不一樣的cell高度設置

這里引出一個估計cell高度的方法:(針對微博方面)

Paste_Image.png

這里引出兩個樣式:(也可以在stroyboard中選擇)

Paste_Image.png

這個也是代理方法:與那個返回頭部高度容易混淆,要記住返回值類型

Paste_Image.png

tableView的代理方法,默認繼承了UIScrollViewDelegate

@protocol UITableViewDelegate<NSObject,UIScrollViewDelegate>

所以可以直接使用這個方法監聽tableView的滾動

// 監聽tableView 的滾動
- (void)scrollViewDidScroll:(UIScrollView*)scrollView

說到TableViewController,在MainStoryBoard中:
一般新手會直接將類型名改為UITableViewController,這樣就導致錯誤出現

Paste_Image.png

注意點:錯誤將UIViewController當做UITableViewController來用

其實添加

Paste_Image.png
Paste_Image.png

做好上面這一步在UITableViewController里面:
默認:
self.view == self.tableView,是同一個對象。
默認:
self.tableView.dateSource= self;
self.tableView.delegate = self

cell的循環利用(第三種思路)

Paste_Image.png

選中cell,點擊重用標識

這樣在代碼中,就可以省略掉:那個判斷語句:if(cell== nil){創建cell的方法}

以后在tableView中開發一個cell

Paste_Image.png

pragma mark - 創建、設置cell

抽出cell

- (UITableViewCell *)cell:(UITableView*)tableView indexPath:(NSIndexPath*)indexPath
{
    //0.重用標識
    //被static修飾的局部變量:只會初始化一次,在整個程序運行過程中,只有一份內存
    staticNSString*ID = @"cell";
    //1.先根據cell的標識去緩存池中查找可循環利用的cell
    UITableViewCell*cell = [tableViewdequeueReusableCellWithIdentifier:ID];
    //2.覆蓋數據
    cell.textLabel.text = [NSString stringWithFormat:@"cell- %zd", indexPath.row];
    returncell;
}

效果圖

Paste_Image.png

tableView的常見設置:


Paste_Image.png

從iOS7以后,分割線變成了兩變都有間距,所以如果要達到一條線貫穿整個cell,那就添加一個View,設置它粘著cell的底部。。
添加一個UIView,設置左右下部約束,高度約束設為1,就可以看到一條線貫穿整個cell的底部了。

Paste_Image.png
- (void)ViewDidLoad
{
    [Super ViewDidLoad];
    [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    [self.tableView setLayoutMargins:UIEdgeInsetsZero];
}

在cell將要顯示出來的方法中執行下面的代碼

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setSeparatorInset:UIEdgeInsetsZero];
    [cell setLayoutMargins:UIEdgeInsetsZero];
}

cell的樣式設置
注意:SeparatorStyleNone取消選中樣式,上面還有一個,長得很像

Paste_Image.png

系統自帶的方法:只能控制cell的顏色選中為灰色,或者沒有。在iOS6之前是可以實現的

Paste_Image.png

如果想自定義選中cell的背景顏色:(也可以設置圖片,UIImage等等,都可以設置)

Paste_Image.png

如果設置不選中cell的背景顏色(兩種方法)

cell.backGroundColor = [UIColor redColor];

另一種設置方法cell.backgroundView

Paste_Image.png

以上兩種都可以,但是后面的VIew優先級比較高

cell的右邊展示例如箭頭,加號等

 // 設置指示器(灰色小箭頭)
 cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;

如果想自定義,例如美工做一個漂亮的指示器圖片(當然按鈕也是可以的)

cell.accessoryView = [[UIImageView alloc] initWithImage:];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容