iOS基礎 - UITableViewController

1. 繼承UITableViewController默認會設置數據源和代理,而且會自動遵照數據源和代理協議,而且self.tableView 至關於 self.view

2.更換控制器時,注意把storyboard中以前的控制器給刪了,而後在從新拖一個進來,而且設置他的class爲新的控制器。就能在加載程序的時候,進入新的控制器。

3.自定義cell例子思路引導

步驟一:建立xib,描述自定義cell的外觀。(UIImageView,3UILabel數組

步驟二取消Autolayout緩存

步驟三:實現數據源方法ide

  1. 定義可重用標識
  2. 從緩衝池裏取cell
  3. 判斷cell是否爲空,若是爲空,就手動建立
  4. 設置cell的內容

步驟四:經過代理方法,設置cell的高度。字體

補充:若是全部行同樣,用rowHeigth屬性設置高度,不同用代理設置高度。atom

步驟五:設置xib中重用標識符。spa

步驟六:建立模型對象Newstitle,icon,comments,author代理

步驟七:解析pilst文件轉成模型數據對象

步驟八:建立自定義cell類,而且屬性與xib連線。(不要依賴控制器)繼承

步驟九:自定義cell提供一個類方法接口給外界。接口

步驟十:在外界直接使用自定義cell

4.自定義視圖的步驟

1.建立xib,描述自定義視圖。

2.xib的名稱最好跟自定義視圖名稱類似。

3.建立自定義視圖類,類名和xib名字相同

4.將自定義視圖和xib關聯,告訴xib描述哪一個自定義視圖。即更改xib裏的class爲自定義類

5.綁定以後,而後讓自定義視圖類的屬性和xib中的控件連線。

6.連線成功,點擊小實點,能看下xib上的控件外部有框框就OK了。

7.在自定義視圖類中給外界提供類方法接口,用來返回一個自定義視圖類,方法名以本身類名開頭。

8.實現自定義視圖類方法

9.自定義視圖建立成功,在外界直接導入頭文件就能使了。

10.運行效果

5. 屬性的名稱和方法名稱不要以new開頭

6. 自定義視圖是UITableViewCell,描述它的xib必定要設置重用標識。

7. 封裝cell的步驟

1. 新建xib描述cell的樣子---DealCell.xib

2.新建UITableViewCell的子類---DealCell(封裝xib內部的全部東西)

注意xib名稱要和類名名稱同樣

3. 修改xib中cell的類名(class)爲DealCell

4.DealCell中擁有xib中的全部子控件(聲明屬性、進行連線)

5.新建模型Deal,封裝數據,名字也要取得有意義。

6. 給DealCell增長模型屬性

@property (nonatomic, strong) Deal *deal;

7. 重寫setDeal:方法,在這個方法中根據模型數據設置cell內部子控件的屬性

8.提供一個類方法,返回從xib中建立好的cell對象

+ (id)dealCell;

+ (id)dealCell

{

return [[NSBundle mainBundle] loadNibNamed:@"DealCell" owner:nil            options:nil][0];

}

9.xib中的cell添加一個重用標識(好比deal),提供一個類方法,返回重用標識

10.提供一個類方法,返回cell的高度

+ (CGFloat)cellHeight;

+ (CGFloat)cellHeight

{

    return 80;

}

11.在控制器中導入自定義cell的頭文件就能使用了。

8. 設置每一行高度

每一行cell高度同樣,使用這個方法

每一行,高度不同,使用代理方法

9. 微博小例子思路(用代碼自定義cell)

思路:項目中cell中內部控件高度不同,最好用代碼建立自定義cell

步驟一:建立自定義cell

步驟二:在下面方法中描述cell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

  1. 添加內部的子控件到contentView上面(先無論位置和內容)
  2. 建立微博模型
  3. 給微博模型提供一個類方法,將字典轉換爲模型。
  4. 給自定義cell添加微博模型,重寫set方法,設置cell子控件的數據和位置
  5. 設置數據
  6. 設置位置

位置計算注意:計算文字高度時,若是UILabel不須要換行,根據字體算出尺寸,使用如下方法。

- (CGSize)sizeWithFont:(UIFont *)font;

若是UILabel須要換行,使用使用如下方法.

5.因爲返回每一行高度比返回每一行cell內容先調用。所以獲取每一行的高度,不能直接從cell對象中獲取,由於那時候還沒建立cell對象,所以咱們須要另外建立一個模型,用來管理cell內部全部子控件的framecell的總高度。

6.viewDidLoad方法中,就將cellFrame模型用數組保存起來.

7.實現數據源方法。

10. 註冊一個xib文件

若是tableView經過identifier這個標誌去緩衝池中沒有取到可循環利用的cell,就會加載xib文件來建立。

- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier

11. 註冊自定義單元格

若是tableView經過identifier這個標誌去緩衝池中沒有取到可循環利用的cell,就會加載cellClass類來建立。

-(void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier

12.UITableViewCell裏只有一個子控件contentView,即便xib中將子控件拖入cell中,可是是假象,實際上蘋果幫咱們已經將子控件添加到contentView.

 

 

 

 

1、加載xib文件的兩種方式 1.方法一(NewsCell是xib文件的名稱) NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"NewsCell" owner:nil options:nil];

2.方法二 UINib *nib = [UINib nibWithNibName:@"NewsCell" bundle:nil]; NSArray *objects = [nib instantiateWithOwner:nil options:nil];

2、設置cell的高度 1.若是每一行cell的高度都是同樣的,直接使用tableView的rowHeight屬性設置cell的高度便可 tableView.rowHeight = 80;

2.若是每一行cell的高度不必定同樣,應該用代理方法設置cell的高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {     // 返回indexPath這行對應cell的高度     return 80; }

3、UITableViewController 1.UITableViewController內部默認會建立一個UITableView *tableView 2.UITableViewController內部tableView的delegate(代理)和dataSource(數據源)就是這個UITableViewController 3.UITableViewController內部tableView就是控制器的view

4、自定義cell 1.經過xib 1> 必定要注意在xib的cell中設置重用標識(reuse identifier)

2> 封裝的步驟 * 新建xib描述cell的樣子---DealCell.xib * 新建UITableViewCell的子類---DealCell(封裝xib內部的全部東西) * 修改xib中cell的類名(class)爲DealCell * 在DealCell中擁有xib中的全部子控件(聲明屬性、進行連線) * 新建模型Deal,封裝數據 * 給DealCell增長模型屬性 @property (nonatomic, strong) Deal *deal; * 重寫setDeal:方法,在這個方法中根據模型數據設置cell內部子控件的屬性 * 提供一個類方法,返回從xib中建立好的cell對象 * 給xib中的cell添加一個重用標識(好比deal),提供一個類方法,返回重用標識 * 提供一個類方法,返回cell的高度

3> 使用cell * 設置每一行cell的高度 * 利用重用標識去緩存池取得cell * 若是緩存池沒有cell,建立cell * 傳遞模型給cell

2.經過代碼 1> 新建一個UITableViewCell的子類---WeiboCell

2> 在建立cell的時候(initWithStyle:reuseIdentifier:方法中)添加cell內部須要使用的子控件 (注意:只管建立添加子控件,先不要去管子控件的位置和尺寸)

3> 新建一個模型類---Weibo,增長對應的數據屬性

4> 給WeiboCell增長一個Weibo模型屬性,在拿到Weibo模型數據的同時設置子控件的屬性

5> 重寫setWeibo:方法,在這裏面取出Weibo模型的數據顯示到子控件上

5、UITableView方法補充 1.若是tableView經過@"Cell"這個標誌去緩存池中沒有取到可循環利用的Cell,就會加載MyCell1.xib文件來建立cell [self.tableView registerNib:[UINib nibWithNibName:@"MyCell1" bundle:nil] forCellReuseIdentifier:@"Cell"];

2.若是tableView經過@"cell2"這個標誌去緩存池中沒有取到可循環利用的Cell,就會建立MyCell2對象做爲cell [self.tableView registerClass:[MyCell2 class] forCellReuseIdentifier:@"cell2"];

相關文章
相關標籤/搜索