1. 程式人生 > >2015年07月13日第九天筆記

2015年07月13日第九天筆記

QQ好友列表細節歸納
===在控制器===
1.將Main.storyboard對應的的控制器換成自定義的控制器 面板設定
2.設定組高:self.tableView.sectionHeaderHeight = 44;
3.根據組模型特點返回對應行數:return group.open? group.friends.count:0;
4.在viewForHeaderInSection方法裡
1)建立自定義的header
2)設定代理
3)傳遞模型
4)返回這個header
5.實現代理方法
===在自定義的Header類===
.h中
1)定義代理協議
2)類宣告,繼承:UITableViewHearFooterView
3)定義組模型
4)定義代理
.m中
1)定義類延展:定義所需子控制元件屬性
2)實現

+(instancetype)headerWithTableView:(UITableView *)tableView

3)封裝cell重用的程式碼
4)單寫

-(id)initWithReuseIndentifier:(NSString *)reuseIdentifier

5)在給按鈕改背景,標題,標題顏色的時候 用set去設定
6)為了讓header的子控制元件frame及時有效,重寫-(void)layoutSubviews,在裡面設定子控制元件的frame,當然先[super layoutSubviews];
7)重寫setter方法,給組模型,子控制元件賦值
8)給按鈕指定一個點選事件方法

[nameBtn addTarget:self action:@selector(nameClick) forControlEvents:UIControlEventTouchUpInside];
9)亮點:self.group.open = ! self.group.open;

10)判斷代理有沒有實現代理方法

if([self.delegate respondsToSelector:@selector(groupHeaderClick:)])

靜態cell細節歸納
1.UI設計
1)在Main.storyboard刪除自動生成的ViewController,拖入一個UITableViewController
2)調尺寸,去自適應
3)選中TableViewController重新關聯到ViewController

4)把箭頭 storyBoard entry point 調出來?

5)設定tableView的組個數

6)cell設定

QQ列表程式碼分析
1.頭部View自定義實現 繼承:UITableViewHeaderFooterView
==完全封裝
1)封裝cell的過程

+(instancetype)headViewWithTableView:(UITableView *)tableView

2)重寫-(instacetype)initWithReuseIndentifier
1.實現父類 initWithReuseIndentifier
2.新增子控制元件:設定背景,設定內邊距,新增事件
設定按鈕內容水平對齊方式

nameView.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

設定按鈕內容上左下右的內間距

nameView.contentEdgeInsets = UIEdgeInsetsMake(0,10,0,0);

設定按鈕標題上左下右的間距

nameView.contentEdgeInsets = UIEdgeInsetsMake(0,10,0,0);

按鈕新增點選事件

[nameView addTarget:self action:@selector(nameViewClick) forControlEvents:UIControlEventTouchUpInside];

按鈕中小三角的旋轉處理

nameView.imageView.contentMode = UIViewContentModeCenter;
nameView.imageView.clipsToBounds = NO;

3)重寫-(void)layoutSubviews方法:
a:要實現父類的(不實現會導致控制元件上的點選事件失效)

b:在這裡設定子控制元件的frame的原因:初始化時,當前headView的frame還沒有值,這個方法可以監聽當前控制元件什麼時候有值
,只有headView的frame有值,給它的子控制元件的frame賦值才有意義

4)給資料模型賦值,子控制元件賦值放在這個setter方法裡
給控制元件的transform賦值

self.nameView.image.transform = CGAffineTransformMakeRotation(M_PI_2);
復位
self.nameView.image.transform = CGAffineTransformIndentify;

5)點選事件
設定代理,在控制器裡的headView建立方法裡設定

1.cellView自定義實現
==完全封裝:本質還是利用自帶cell,只不過把建立封裝了,並且封裝了對應的資料模型
2.懶載入設計
放在主模型類裡去做,這樣在將主模型新增到陣列之前,將次模型去字典轉模型,同時將轉好的模型陣列存放在主模型下定義的一個次模型數組裡
將次模型封裝在主模型裡,當解析資料檔案時,一併將每個主模型的次模型資料,放入次模型數組裡。
3.將取資料檔案放在控制器里加載,和封裝在模型里加載區別?